【问题标题】:How to write select query in django in chain of one-to-many relationship?如何在 django 中以一对多关系链编写选择查询?
【发布时间】:2019-06-15 18:19:57
【问题描述】:

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

一开始,我的英语不太好。我很抱歉 :)。我有 3 张桌子。司机,汽车和骑行。 Driver 和 Car 之间的关系是(一对多:一个 Driver 可以有多个 Car。Car 和 Ride 之间的关系是(一对多:一个 Car 可以有多个 Ride。我想要拥有 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 Rides 的驱动程序

【问题讨论】:

  • 可以分享一下相关型号吗?实际上,通过使用 Django,您不应该考虑 tables 而是考虑模型。

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


【解决方案1】:

您可以计算每个DriverRides 的数量,然后对该数量进行过滤,例如:

from django.db.models import Count

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

因此,我们首先使用相关Rides 的Count(..) [Django-doc] 注释每个Driver 对象,然后我们通过指定nrides 字段注释应该大于或等于x 来过滤该查询集,通过使用__gte lookup [Django-doc]。这里x当然是你需要填写的必乘次数(比如5)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    • 2013-11-22
    • 2011-11-13
    • 2014-07-14
    • 1970-01-01
    • 2017-02-02
    • 1970-01-01
    相关资源
    最近更新 更多