2014-06-18 3 views
0

J'ai deux modèles: adverisement_campaign et advertisement_view (journal des vues). Chaque campagne publicitaire doit être affichée à l'utilisateur pas plus d'une fois tous les X jours. Ainsi, le modèle de campagne a un champ avec le nombre de jours. Je dois sélectionner des campagnes qui n'ont pas été affichées à l'utilisateur plus de quelques jours pour cette campagne. Et obtenir une campagne aléatoire de cette liste pour afficher l'utilisateur. Donc, j'ai écrit une requête, que les campagnes sélectionner, n'ont pas encore vu.Filtrer les modèles par champ modèle associé dans Django ORM

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

Mais maintenant je dois filtrer des campagnes pour montrer la campagne de l'utilisateur, qu'il n'a pas vu plus de X jours, spécifié pour chaque entreprise. Quelque chose comme ça

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

Comment faire ce filtrage avec Django ORM?

Répondre

0

Quelque chose comme devrait faire l'affaire:

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') 
Questions connexes