Данные Django ORM на основе группы максимальных дат

#python-3.x #django #django-models #django-orm

#python-3.x #джанго #джанго-модели #джанго-орм

Вопрос:

Модель

 class quote(models.Model):  id = models.AutoField(primary_key=True)  stock = models.ForeignKey(stock, related_name='stock', on_delete=models.CASCADE)  price = models.DecimalField(max_digits=30,decimal_places=5)  valid_till = models.DateTimeField()  created_at = models.DateTimeField() #time  updated_at = models.DateTimeField(blank=True,null=True)  

бывшие данные

 id stock price valid_till created_at 1. 1. 200. 09 April. 09 April  2. 1. 300. 10 April. 09 April  3. 2. 100. 07 April. 07 April  4. 2. 200. 08 April. 08 April   

желание выхода

 id stock price valid_till created_at 2. 1. 300. 10 April. 09 April  4. 2. 200. 08 April. 08 April   

Мне нужна только запись о максимальной дате каждой акции

в настоящее время выполняется quote.objects.values(«стоковый__символ»).аннотировать(max_date=Max(«действительный»))

но все еще не в состоянии придумать правильное решение

Комментарии:

1. вам нужны все котировки с их акциями к максимальной дате?

2. да, я хочу, чтобы макс был на их складе до максимальной даты

Ответ №1:

Вот два способа получить предложение(предложения) с максимальной датой. Используя этот набор запросов, вы можете затем найти любые связанные экземпляры модели, которые вам нужны.

  1. Найдите максимальное значение с помощью метода aggregate (), затем запросите фильтрацию максимального значения
 # returns a dict containing your max_date aggregation = quote.objects.aggregate(max_date=Max('valid_till'))  # get max_date from dict max_date = aggregation['max_date']  #filter quotes based on max_date max_date_quotes = quote.objects.filter(valid_till = max_date)  
  1. Закажите по valid_till. Это предполагает, что у вас есть одна максимальная дата.
 max_date_quote = quote.objects.all().order_by('-valid_till').first()  

Комментарии:

1. нет будет иметь максимальную дату для каждой акции