2013-05-12 3 views
-1
class Price(models.Model): 
    product = models.ForeignKey(Product) 
    date = models.DateField() 
    amount = DecimalField() 

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

Пример:
на 1.01.2013 - Product1 сумму 10 $ (т.е. это значение от 1,01 до 11,01)
на 12.01.2013 - Product1 сумму $ 12
на 10.05.2013 - Product1 сумму $ 17
на 11.06.2013 - сумма Product1 14 $

на 18.02.2013 - product2 сумму $ 3
на 12.06.2013 - product2 сумму 15 $

на 25.04.2013 - Product3 сумму $ 11
на 17.06.2013 - product3 сумму 13 $

DB Backend-MySQL

Как можно выбрать выберите фактическое количества (и дату введенное эту суммы) для каждого продукта с датой < = текущая_дат и значение суммы во введенном пользователем диапазоне
Например. на дату 14.05.2013 и количественном диапазоне 10-20 $ нужно привести только два объекта в QuerySet:

Product1 10.05.2013 17$ 
Product3 25.04.2013 11$ 

UPD. Заинтересованное оптимальное решение, не нужно много SQL-запросов и не нужно в коде оценивать цикл всех записей.

ответ

2

Вы можете использовать запросы (меньше) и gt (больше) для поля даты.
Джанго документация: https://docs.djangoproject.com/en/dev/ref/models/querysets/#gt

from datetime import date 

products = Product.objects.filter(price__date__lte=date.today(),\ 
            price__amount__range=(start, end).distinct() 
+0

[ 'range'] (https://docs.djangoproject.com/en/dev/ref/models/querysets/#range) лучше подходит для этого. –

+0

Это неправильно. В этом варианте я не получаю последние цены на дату для каждого продукта. Мне нужна специальная запись, тогда вам нужно только два объекта в наборе запросов. – nnmware

+0

Я отредактировал свой ответ для вашего замечания, попробуйте сейчас. – WebPal

Смежные вопросы