我正在尝试检索关系的one
一方OnetoMany
,但是此操作受many
一方必须满足的一些条件的限制:
# one side
class Car(models.Model):
# many side
class Obligation(models.Model):
car = models.ForeignKey(to=Car, on_delete=models.CASCADE)
expiration_date = models.DateField(default=date.today)
我所寻找的是获得所有这些Car
与Obligation
他们expiration_date
都过期了,因为我已经创建了一个下面manager
执行此操作:
from datetime import date
TODAY = date.today()
class CarManager(models.Manager):
"""Define a manager for Car model."""
def with_obligations_expired(self) -> "QuerySet[Car]":
"""Get those cars whose obligations are expired."""
return self.get_queryset().filter(
obligation__expiration_date=TODAY
)
如果您在运行时Car
有2或3 Obligation
,Car.objects.with_obligations_expired()
则将获得:
<QuerySet [<Car: car1>, <Car: car1>, <Car: car1>]>
结果是具有汽车重复记录的Queryset列表,因为许多义务属于一辆汽车,那么每个义务都会返回该汽车所属的汽车。但我需要一个没有重复记录的列表。
我的意思是我需要获得那些义务已到期且没有重复记录的汽车的清单。
您可以使用.distinct()
[Django-doc]返回一次相同的对象:
from datetime import date
class CarManager(models.Manager):
"""Define a manager for Car model."""
def with_obligations_expired(self) -> "QuerySet[Car]":
"""Get those cars whose obligations are expired."""
return self.get_queryset().filter(
obligation__expiration_date__lte=date.today()
).distinct()
因此,如果至少有一个已过期,则此查询集将返回Car
给定值。Obligation
您可能要使用__lt
查找[Django-doc]或__lte
查找[Django-doc]进行过滤,以使到期日期在今天之前。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句