Django QuerySet, фильтрация данных на основе последнего ввода столбца / поля каждого из данных, равна определенному значению - PullRequest
0 голосов
/ 07 сентября 2018
#models.py
class Orders(models.Model):
    orderid = models.IntegerField(db_column='orderID', primary_key=True) 
    createdate = models.DateField(db_column='createDate', blank=True, null=True) 
    pickupdate = models.DateField(db_column='pickupDate', blank=True, null=True)  
    returndate = models.DateField(db_column='returnDate', blank=True, null=True)  
    pickupstore = models.ForeignKey(Branch, models.DO_NOTHING, db_column='pickupStore', blank=True, null=True,related_name = 'pickupstore')  
    returnstore = models.ForeignKey(Branch, models.DO_NOTHING, db_column='returnStore', blank=True, null=True,related_name = 'returnstore') 
    rentedvehicle = models.ForeignKey('Vehicles', models.DO_NOTHING, db_column='rentedVehicle', blank=True, null=True)  
    customer = models.ForeignKey(Customer, models.DO_NOTHING, db_column='customer', blank=True, null=True)


class Vehicles(models.Model):
    vehicleid = models.IntegerField(db_column='vehicleID', primary_key=True)  
    make = models.CharField(max_length=45, blank=True, null=True)
    model = models.CharField(max_length=45, blank=True, null=True)
    series = models.CharField(max_length=45, blank=True, null=True)

Заказы модели имеют внешний ключ, арендованный автомобиль, который относится к моделям транспортных средств

Я отфильтровал данные по состоянию пикапа, например, список автомобилей, которые забраны из магазина в определенном состоянии

Vehicles.objects.filter(orders__pickupstore__state = request.POST['state'])

Я хочу иметь возможность отфильтровать отфильтрованные данные выше, чтобы я мог получить список автомобилей, которые были забраны из магазина в определенном состоянии С последней записью в моделях Orders было returnstore__state == определенное состояние

Итак, в принципе, я хочу добиться этого:

Vehicles.objects.filter(orders__pickupstore__state = request.POST['state']).filter(the latest entry returnstore state =request.POST['state'])

1 Ответ

0 голосов
/ 07 сентября 2018

Множество возможных решений. Оптимальный зависит от вашей версии Django (1.11 или выше?). Вот одно из возможных решений:

from django.db.models import Max, F

Vehicles.objects.filter(orders__pickupstore__state = request.POST['state']).annotate(max_date=Max('orders__returndate')).filter(orders__return_date=F('max_date')).filter(orders__state = request.POST['state'])

Здесь происходит то, что мы определяем самую последнюю дату возврата, затем фильтруем заказы, чтобы включить только самые последние, затем фильтруем Транспортные средства по состоянию этого последнего заказа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...