Фильтровать модели по соответствующему полю модели в Django ORM

#mysql #django

#mysql #django

Вопрос:

У меня есть две модели: adverisement_campaign и advertisement_view (журнал просмотров). Каждая рекламная кампания должна отображаться пользователю не чаще, чем раз в X дней. Итак, модель кампании имеет поле с количеством дней. Мне нужно выбрать кампании, которые не отображались пользователю более количества дней для этой кампании. И получить случайную кампанию из этого списка для отображения пользователя. Итак, я написал запрос, который выбирает кампании, еще не видел.

 user_campaigns = AdvertShowEvent.objects.filter(user=user)
                                        .values('advertisement_id')
                                        .annotate(datetime_last=Max('datetime'))
                                        .values_list('advertisement_id')
  

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

 user_campaigns = AdvertShowEvent.objects.filter(user=user, **datetime_last__gte=asdvertisement.days_between_shows**)
                                        .values('advertisement_id')
                                        .annotate(datetime_last=Max('datetime'))
                                        .values_list('advertisement_id')
  

Как я могу выполнить эту фильтрацию с помощью Django ORM?

Ответ №1:

Что-то вроде должно сработать:

 user_campaigns = AdvertShowEvent.objects.filter(user=user, 
 **datetime_last__gte=datetime.datetime.now() - datetime.timedelta(days=days_between_shows))
                                        .values('advertisement_id')
                                        .annotate(datetime_last=Max('datetime'))
                                        .values_list('advertisement_id')