我正在尝试找到一种简单的方法来返回相互分配了外键的对象。
例如,我有这样的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)
对于我的父母,我创建了对象family1
,family2
,family3
。对于我的孩子,我创建了与family1
中的外键相关的对象John
和Stefani
。
创建仅返回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()
这为您提供了父级的所有子项。