Python 如何按父字段筛选子项

Python 如何按父字段筛选子项,python,django,django-models,django-queryset,Python,Django,Django Models,Django Queryset,例如,models.py: class-Guy(models.Model): name=models.CharField(最大长度=30) 类Mom(models.Model): name=models.CharField(最大长度=150,选项=MOTHER\u name,默认值=MOTHER\u name[0][0]) guy=models.OneToOneField(guy,on\u delete=models.SET\u NULL) 如何获取母亲名为“Sophia”的男孩的查询集您可以

例如,models.py:

class-Guy(models.Model):
name=models.CharField(最大长度=30)
类Mom(models.Model):
name=models.CharField(最大长度=150,选项=MOTHER\u name,默认值=MOTHER\u name[0][0])
guy=models.OneToOneField(guy,on\u delete=models.SET\u NULL)
如何获取母亲名为“Sophia”的男孩的查询集

您可以找到母亲名为“Sophia”的验证合同id,您可以在此验证合同id中找到其id的孩子

您可以使用以下查询:

Guy.objects.filter(id__in=Mom.objects.filter(name='Sophia').values_list('guy_id',flat=True))

如果模特妈妈有两种关系(guy1-OneToOneField到Guy模特和guy2-OneToOneField到Guy模特),我该怎么办?如果你是说一个母亲和两个男人有亲戚关系,那是不可能的,因为你的妈妈模特OneToOneField和Guy模特有亲戚关系。否则,您有两个母亲,此查询返回这两个母亲。作为建议,您可以将foreignkey添加到您的男性模型中,并将其与母亲连接。因为在项目的当前状态下,母亲和父亲之间有一对一的关系,所以这是一个非常昂贵的改变。否则,我可以创建两个类似的查询集(一个用于guy1,一个用于guy2),然后组合它们。谢谢您的帮助!如果我没弄错的话,你有很多人的母亲叫索菲亚。如果为真,则不需要多个查询。此查询返回这些家伙