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
-~----------~----~----~----~------~----~------~--~---

Reply via email to