Как использовать timenow для выборки объектов с двумя датами, даже если одна из дат уже в Django? - PullRequest
1 голос
/ 10 марта 2020

У меня есть модель trips, в которой in_flights и out_flights связаны с Client.

Я хотел показать, какие Clients имеют поездки после , сейчас поэтому я сделал следующее:

ls= Clients.objects.get(nif=nif
ClientsDash = (Clients.objects.filter(trip__in_flight__date__gt=timezone.now()).filter(trip__out_flight__date__gt=timezone.now()).distinct())

Проблема в том, что если у одного Клиента был один из рейсов в прошлом или только один из рейсов, он не будет отображать trip.

РЕДАКТИРОВАТЬ

Это Trip модель

class Trip(models.Model):
    trip_id = models.CharField(max_length=20, unique=True, verbose_name="Ref. Viagem")
    destination = models.CharField(max_length=200, null=True, verbose_name='Destino')
    client = models.ForeignKey(Clients, null=True, on_delete=models.CASCADE, verbose_name="Cliente")
    out_flight = models.ForeignKey(Flight, related_name="outbound_flight" , null=True, on_delete=models.SET_NULL, verbose_name="Voo Ida")
    hotel = models.ForeignKey(Hotels, null=True, on_delete=models.SET_NULL, verbose_name="Hotel")
    in_flight = models.ForeignKey (Flight, related_name="inbound_flight", null=True, blank=True, on_delete=models.SET_NULL, verbose_name="Voo Regresso")

И Flight модель

class Flight(models.Model):
    date = models.DateTimeField(default=datetime.now, blank=True, verbose_name="Data")
    flight_id = models.CharField(max_length=10, verbose_name="Ref. Voo")
    company = models.ForeignKey(AirCompany, null=True, on_delete=models.SET_NULL, verbose_name="Companhia")
    airport = models.ForeignKey(Airport, null=True, on_delete=models.SET_NULL, verbose_name="Aeroporto")

1 Ответ

0 голосов
/ 10 марта 2020

Здесь вы фильтруете коллекцию дважды, так что это означает, что вы будете получать только Client s, которые имеют trip__in_flight и a trip__out_flight, которые находятся в будущем.

Однако вы можете использовать логический или |, чтобы указать, что одного полета достаточно:

from django.db.models import Q

Clients.objects.filter(
    Q(trip__in_flight__date__gt=timezone.now()) |
    Q(trip__out_flight__date__gt=timezone.now())
).distinct()
...