Django:覆盖抽象模型的 save() 函数

neo*_*ser 2 python django django-models

我试图在抽象模型上覆盖 save() 函数,但出现错误

Manager isn't accessible via Entry instances
Run Code Online (Sandbox Code Playgroud)

因此,如果可能,您如何覆盖抽象模型上的保存功能。从这个扩展的模型是Entry

这是我的模型代码:

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
Run Code Online (Sandbox Code Playgroud)

(对于那些熟悉的人,我Entry在 zinnia-blog 上扩展了模型,但认为这无关紧要)

mik*_*iku 5

self.__class__().objects应该是self.__class__.objects

请参阅有关检索对象的说明http : //docs.djangoproject.com/en/dev/topics/db/queries/#retrieving-objects

管理器只能通过模型​​类访问,而不是从模型实例访问,以强制分离“表级”操作和“记录级”操作。

  • `self.__class__.objects` 或 `EntryBlog.objects`,以你觉得更简洁的那个为准。 (2认同)