Я пытаюсь получить сторону 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 с повторяющимися записями об автомобилях, поскольку многие обязательства принадлежат одному автомобилю, тогда каждое обязательство возвращает принадлежащий ему автомобиль. но мне нужен список без повторяющихся записей.
То есть мне нужно получить список тех автомобилей с просроченными обязательствами без повторных записей.