如何选择具有特定儿童(多对一)django的父母?

时间:2018-04-08 19:40:12

标签: django django-models django-queryset one-to-many

在django的多对一关系中,如下所示:

class Parent(model.Model):
    name = models.CharField(max_length=50)

class Child(model.Model):
    parent = models.ForeignKey(Parent)
    name = models.CharField(max_length=50)
    hobby = models.CharField(max_length=50)
    age = models.IntegerField(default=0)

如果我有N个不同的儿童记录标准,例如,让N = 2,标准为:

Child__name='Bob'
Child__hobby='Skiing'
Child__age__gt=16

Child__name='Billy'
Child__hobby__icontains='read'
Child__age__gte='21'

如果父母没有至少一个符合上述每个标准的孩子,我该如何过滤掉父母?

我最好以一种方式写这个,这样我一次可以应用一个过滤器,这样我就可以选择检查哪些父母不满足哪些标准。

2 个答案:

答案 0 :(得分:1)

如果我理解,你需要对Children模型进行过滤,并获得生成的查询集的父项:

qs = Children.objects.filter(
    name='billy',
    age__gte=21
).values('parent')

答案 1 :(得分:0)

如果您希望获得与现有Parent没有任何关系的Child个对象,可以使用此项,
parent_queryset = Parent.objects.filter(child__isnull=False)

如果您希望与Child对象达到类似效果,请尝试使用此选项 child_queryset = Child.objects.filter(parent__isnull=False)