#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')