Django 查询自引用查询集
Django query self referencing queryset
我有一个自引用模型。关系 copied_from 用于保存从中复制当前事物对象的事物对象。这是我的模型:
class Thing(models.Model):
copied_from = models.ForeignKey("Thing", related_name="copies", null=True, default=None, on_delete=models.SET_NULL)
collection = models.ForeignKey(Collection, ...)
...
我想要实现的是从一个集合中获取所有没有被复制的东西。我正在考虑使用 union
来获取所有事物并“减去”所有已复制的事物。问题是,在我的解决方案中,我必须遍历 copied_from__is_null=False
处的查询集以获取已用于创建副本的事物的 ID。这当然不是一个好的解决方案。
您可以过滤:
Thing.objects.filter(<b>copied_from=None</b>)
这将检索所有 Thing
,其中 copied_from
是 None
。
如果要检索所有 Thing
没有副本且未被复制的内容,您可以使用:
Thing.objects.filter(<b>copied_from=None, copies=None</b>)
或者如果你想检索 Thing
没有 Thing
的副本,你可以使用:
Thing.objects.filter(<b>copies=None</b>)
这是可行的,因为我们在 Thing
table 上执行 LEFT OUTER JOIN
,并且只检索 LEFT OUTER JOIN
是 [=20] 的 Thing
=].
我有一个自引用模型。关系 copied_from 用于保存从中复制当前事物对象的事物对象。这是我的模型:
class Thing(models.Model):
copied_from = models.ForeignKey("Thing", related_name="copies", null=True, default=None, on_delete=models.SET_NULL)
collection = models.ForeignKey(Collection, ...)
...
我想要实现的是从一个集合中获取所有没有被复制的东西。我正在考虑使用 union
来获取所有事物并“减去”所有已复制的事物。问题是,在我的解决方案中,我必须遍历 copied_from__is_null=False
处的查询集以获取已用于创建副本的事物的 ID。这当然不是一个好的解决方案。
您可以过滤:
Thing.objects.filter(<b>copied_from=None</b>)
这将检索所有 Thing
,其中 copied_from
是 None
。
如果要检索所有 Thing
没有副本且未被复制的内容,您可以使用:
Thing.objects.filter(<b>copied_from=None, copies=None</b>)
或者如果你想检索 Thing
没有 Thing
的副本,你可以使用:
Thing.objects.filter(<b>copies=None</b>)
这是可行的,因为我们在 Thing
table 上执行 LEFT OUTER JOIN
,并且只检索 LEFT OUTER JOIN
是 [=20] 的 Thing
=].