Django ORM данных на основе максимальной группы дат
модель
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)
ex data
id stock price valid_till created_at
1. 1. 200. 09 April. 09 April
2. 1. 300. 10 April. 09 April
выходное желание
id stock price valid_till created_at
2. 1. 300. 10 April. 09 April
Мне нужна запись только для максимальной даты каждой акции
в настоящее время делаем так quote.objects.values('stock__symbol').annotate(max_date=Max('valid_till')))
но все еще не в состоянии подумать о правильном решении
Вот два метода для получения цитаты (цитат) с максимальной датой. Используя этот набор запросов, вы можете затем найти любые связанные экземпляры модели, которые вам нужны.
- Найти максимальное значение с помощью метода 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)
- Упорядочить по valid_till. Это предполагает, что у вас есть одна максимальная дата.
max_date_quote = quote.objects.all().order_by('-valid_till').first()