Hi, I have created an Identity Mapper for my website - which is as follows:
class IdentityMap(object): def __getattr__(self, name): if not hasattr(self, name): setattr(self, name, {}) return getattr(self, name) MAP = IdentityMap() class MapManager(models.Manager): def get(self, *args, **kwargs): if kwargs.has_key('mapname'): parm = kwargs.pop('mapname') dval = getattr(MAP, self.model.__name__) if not dval.has_key(parm): dval[parm] = super(MapManager, self).get(*args, **kwargs) return dval[parm] else: return super(MapManager, self).get(*args, **kwargs) #Model which is overriden by all models class BaseModel(models.Model): objects = MapManager() class Meta: abstract = True #-------------------------------------------------------------------------------- # Everytime a get is issued (due to lazy loading I did not implement the same for filter), it first checks whether the given mapname is already stored inside MAP, and if not only then will it issue a proper get. Mapname is given by the user - he can give any unique name to it. Now, I wanted to do it for all models. Since User is part of django.auth, I overrode User too as given below. from django.contrib.auth.models import User, UserManager class MyUserManager(UserManager): def get(self, *args, **kwargs): if kwargs.has_key('mapname'): parm = kwargs.pop('mapname') dval = getattr(MAP, self.model.__name__) if not dval.has_key(parm): dval[parm] = super(MyUserManager, self).get(*args, **kwargs) return dval[parm] else: return super(MyUserManager, self).get(*args, **kwargs) class MyUser(User): objects = MyUserManager() class Meta: abstract = True #-------------------------------------------------------------------------------- # But when I issued a get on MyUser, it is failing with the following error File "C:\django\My\..\My\test\test.py", line 164, in UserData data.save(form) File "C:\django\My\..\My\test\models.py", line 361, in save self.user = MyUser.objects.find(form.cleaned_data['user'], username=form.cleaned_data['user']) File "C:\django\My\..\My\test\models.py", line 93, in find dval[parm] = self.get(*args, **kwargs) File "C:\Python24\Lib\site-packages\django\db\models\manager.py", line 93, in get return self.get_query_set().get(*args, **kwargs) File "C:\Python24\Lib\site-packages\django\db\models\query.py", line 337, in get num = len(clone) File "C:\Python24\Lib\site-packages\django\db\models\query.py", line 161, in __len__ self._result_cache = list(self.iterator()) File "C:\Python24\Lib\site-packages\django\db\models\query.py", line 281, in iterator for row in self.query.results_iter(): File "C:\Python24\Lib\site-packages\django\db\models\sql\query.py", line 254, in results_iter for rows in self.execute_sql(MULTI): File "C:\Python24\Lib\site-packages\django\db\models\sql\query.py", line 2011, in execute_sql sql, params = self.as_sql() File "C:\Python24\Lib\site-packages\django\db\models\sql\query.py", line 362, in as_sql out_cols = self.get_columns(with_col_aliases) File "C:\Python24\Lib\site-packages\django\db\models\sql\query.py", line 588, in get_columns col_aliases) File "C:\Python24\Lib\site-packages\django\db\models\sql\query.py", line 633, in get_default_columns root_pk = opts.pk.column AttributeError: 'NoneType' object has no attribute 'column' I even tried changing the metaclass, but it does not seem to have any effect. Can someone help me out? --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~----------~----~----~----~------~----~------~--~---