如何在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个骑乘次数的驱动程序
答案 0 :(得分:2)
您可以计算每Ride
个Driver
的数量,然后根据该数量进行过滤,例如:
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
)。