Skip to content
Advertisement

Django: override the save() function of an abstract model

I have tried to override the save() function on a model that is abstract, and am getting an error

Manager isn't accessible via Entry instances

So if possible, how do you override the save function on an abstract model. The model that extends from this is Entry

Here is my model Code:

class EntryBlog(EntryAbstractClass):
    groups = models.ManyToManyField(group, null=True, blank=True)    

    def save(self, *args, **kwargs):
        if self.featured:
            self.__class__().objects.all().update(featured = False)
        super(EntryBlog, self).save(*args, **kwargs)

    class Meta:
        abstract = True

(For those who are familiar, I am extending the Entry model on the zinnia-blog, but dont think that is relevant)

Advertisement

Answer

self.__class__().objects should be self.__class__.objects.

See the Notes on retrieving objects: http://docs.djangoproject.com/en/dev/topics/db/queries/#retrieving-objects

Managers are accessible only via model classes, rather than from model instances, to enforce a separation between “table-level” operations and “record-level” operations.

User contributions licensed under: CC BY-SA
4 People found this is helpful
Advertisement