仅返回分配了外键的对象的查询集.姜戈



我正在尝试找到一种简单的方法来返回相互分配了外键的对象。

例如,我有这样的models.py文件:

class Parent(models.Model):
name = models.CharField(max_length=100)
class Children(models.Model):
parent = models.ForeignKey(Parent, on_delete=models.CASCADE)
name = models.CharField(max_length=10)

对于我的父母,我创建了对象family1family2family3。对于我的孩子,我创建了与family1中的外键相关的对象JohnStefani

创建仅返回family1(仅返回一次,即使它有许多相关对象(的查询集的最简单方法是什么。返回family 1,因为只有此对象存在外键。

你在查询集的末尾添加一个.distinct()调用[Django-doc]。例如,如果您希望所有Parent至少有一个孩子,则可以编写:

# Parents that have at least one child
Parent.objects.filter(children__isnull=False).distinct()

或者,如果要查找具有名称以Ste开头的子项的Parent,则可以查询:

# Parents that have at least one child with a name that starts with "Ste"
Parent.objects.filter(children__name__startswith='Ste').distinct()

最简单的方法如下:

Perent 对象是单个父对象。

Parent.child_set.all()

这为您提供了父级的所有子项。

最新更新