Django递归关系:如何从管理器对象中删除对象

2024-04-29 06:38:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个下面的类(其他字段是琐碎的(author等),所以省略了)。在

class Article(models.Model):

origin = models.ForeignKey('self', null=True, related_name="%(app_label)s_%(class)s_revision")

我想将一篇文章的所有修订都存储在a.website_article_revision列表中。当我add之后,对该列表的修订,如a.website_article_revision.add(rev),它会自动添加到Article.objects管理器中,这一点可以理解,因为修订对象本身就是一个文章实例。但是我不希望任何修订出现在manager对象中,只出现在article对象a.website_article_revision的list属性中。在

另外,我真的不想创建子类。在


Tags: 对象add列表modelmodelsarticle文章website
2条回答

如果您不希望自己对修订进行建模,则可以使用django-reversion为您完成此工作:

django-reversion is an extension to the Django web framework that provides comprehensive version control facilities.

它有适当的记录。在

听起来像是custom managers的工作:

class ArticleManager(models.Manager):
    def get_queryset(self):
        return super(ArticleManager, self).get_queryset().filter(origin=None)

class Article(models.Model):
    objects = ArticleManager()
    origin = models.ForeignKey('self', null=True, related_name="%(app_label)s_%(class)s_revision")

这将替换Article模型中的默认objects管理器,Article.objects.all()将返回origin是{}的所有文章。在

我假设检查origin is None是否是确定任何给定的article对象是否不是修订的方式。在

编辑:您可能需要将原点ForeignKey更改为OneToOneField。毕竟,一篇文章可能只有一个修订版,而那个修订版可能有另一个修订版,依此类推。在

相关问题 更多 >