如何在django中以一对多关系链的形式编写选择查询?

时间:2019-06-15 18:19:57

标签: python django django-queryset one-to-many database-relations

如何在Django中编写选择查询?我有2个一对一的关系

一开始,我的英语不是很好。我很抱歉 :)。我有3张桌子。驾驶员,驾车和乘车。驾驶员与汽车之间的关系为(一对多:一个驾驶员可以拥有多辆汽车。汽车与乘车之间的关系为(一对多:一辆汽车可以具有多个乘车。我想要具有x的驾驶员列表乘车次数。

我的模特:

class Driver(models.Model):
    account = GenericRelation(Account, related_query_name='drivers')

class Car(models.Model):
    owner = models.ForeignKey(Driver, on_delete=None)

class Ride(models.Model):
    car = models.ForeignKey(Car, on_delete=models.CASCADE)
    request = models.OneToOneField(RideRequest, on_delete=models.CASCADE, null=False)

我期望这样的东西:<QuerySet [<Driver: 1>, <Driver: 2>]>,它是具有大于或等于x个骑乘次数的驱动程序

1 个答案:

答案 0 :(得分:2)

您可以计算每RideDriver的数量,然后根据该数量进行过滤,例如:

from django.db.models import Count

Driver.objects.annotate(
    nride=Count('car__ride')
).filter(nride__gte=x)

因此,我们首先用相关的Driver的{​​{3}}注释每个Ride对象,接下来我们通过指定nrides字段注释应大于{等于x,方法是使用Count(..) [Django-doc]。这里x当然是您需要填写的所需游乐设施的数量(例如5)。