Django:重写抽象模型的save()函数

2 投票
1 回答
3498 浏览
提问于 2025-04-16 12:47

我尝试在一个抽象模型上重写save()函数,但遇到了错误。

Manager isn't accessible via Entry instances

所以,如果可以的话,如何在一个抽象模型上重写save函数呢?这个抽象模型的子类是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

(对于那些熟悉的人来说,我是在zinnia-blog上扩展Entry模型,但我觉得这并不重要。)

1 个回答

5

self.__class__().objects 应该改成 self.__class__.objects

查看关于获取对象的 说明http://docs.djangoproject.com/en/dev/topics/db/queries/#retrieving-objects

管理器只能通过模型类来访问,而不能通过模型实例来访问,这样可以区分“表级别”的操作和“记录级别”的操作。

撰写回答