2016-06-07 1 views
1

Простой сценарий, но не могу понять, как сделать запрос для него:Basic Джанго Query

У нас есть Store модель и Transaction модель. Foreign Key на Transaction модель, относящаяся к Store.

Я хочу запросить список: Только магазинов, которые сделали по меньшей мере, одну сделку в тот день. Все остальные магазины должны быть исключены.


Store.objects.filter(transaction__gt=0, transaction__date_created__gt='2016-06-01')

Когда я попытался бывший запрос, я получил длинный список назад:

[<Store: TrialStore>, <Store: TrialStore>, <Store: TrialStore>, ... ] 

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

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

Редактировать

Store Модель:

class Store(models.Model): 
    status = models.IntegerField(choices=status_choices, default=ACTIVE_STATUS) 
    legal_name = models.TextField(verbose_name='Legal Name') 
    mobile_number = PhoneNumberField(blank=True) 
    email_address = models.EmailField(blank=True) 

Transaction Модель:

class Transaction(models.Model): 
    store = models.ForeignKey(Store) 
    date_created = models.DateTimeField(auto_now_add=True, verbose_name='Created') 
    status = models.IntegerField(choices=status_choices) 
+0

Может вы показываете свои модели, пожалуйста? –

+1

Добавленный код модели – qarthandso

ответ

2

Вы должны использовать distinct():

Store.objects.filter(transaction__gt=0, 
        transaction__date_created__gt='2016-06-01').distinct() 
0

что по этому поводу?

Store.objects.filter(
    transaction__gt=0, 
    transaction__date_created__year='2016', 
    transaction__date_created__month='06', 
    transaction__date_created__day='01' 
) 

в вашем запросе вы говорите «дайте мне все магазины, у которых есть транзакции с 2016.06.01». С моим запросом, «дайте мне все магазины, которые имеют сделки с этого дня»

+0

Даже если бы я действительно запрашивал 'с 2016.06.01', не должен ли я получать только один результат? С тех пор есть только один магазин, который проводит транзакции. Не три. – qarthandso

1

можно заливать поле DATETIME в date при запросе:

Store.objects.filter(transaction__date_created__date=Date(2016, 1, 1)) 

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

  • Нет связанных вопросов^_^