I am trying to write a singleton model which can be subclassed.

from django.db import models

class Singleton(models.Model):
    name = models.TextField()

    def save(self):
        if self.__class__.objects.all().count():
            #There exists another object in the DB
            obj = self.__class__.objects.all()[0]
            for field in self._meta.fields:
                if not field.name == self._meta.auto_field.name:
                    setattr(obj, field.name, getattr(self,
field.name))
            super(Singleton, obj).save()
        else:
            super(Singleton, self).save()

class SubSingleton(Singleton):
    tag  = models.TextField()


I want an API like this,

In [1]: from testf.models import SubSingleton

In [2]: SubSingleton.objects.all().delete()

In [3]: x=SubSingleton(name='a', tag='b')

In [4]: x.save()

In [5]: SubSingleton.objects.count()
Out[5]: 1

In [6]: y=SubSingleton(name='a', tag='b')

In [7]: y.save()
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call
last)

/home/shabda/django_design_pats/<ipython console> in <module>()

/home/shabda/django_design_pats/testf/models.pyc in save(self)
      9             obj = self.__class__.objects.all()[0]
     10             for field in self._meta.fields:
---> 11                 if not field.name ==
self._meta.auto_field.name:
     12                     setattr(obj, field.name, getattr(self,
field.name))
     13             super(Singleton, obj).save()

AttributeError: 'NoneType' object has no attribute 'name'

In [8]: SubSingleton.objects.count()
Out[8]: 1

So SubSingleton._meta.auto_field is none, while I expect it to be a
AutoField with name ='id'.

What am I missing?


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