2015-05-06 3 views
0

Я хочу показать одно уведомление о каждом типе уведомления и последних. Мой вопрос заключается в том, как получить каждый тип уведомления и показать самый последний из этого типа уведомления.Django-Filter запрос по типу

notifications = Notification.objects.filter(**condition). \ 
    exclude(notification_user__in=users). \ 
    order_by('notificationType__priority','-start_date')[:1] 

models.py

class Notification(models.Model): 
title = models.CharField(max_length=75) 
description = models.TextField() 
start_date = models.DateTimeField() 
end_date = models.DateTimeField() 
application = models.ManyToManyField('Products.Application') 
notificationType = models.ForeignKey(NotificationType) 
url = models.URLField(null=True, blank=True) 
region = models.ManyToManyField('Geolocations.Region', null=True, blank=True) 
image = models.ImageField(null=True, blank=True) 
user = models.ManyToManyField(User, through='Notification_User') 

class NotificationType(models.Model): 
type = models.CharField(max_length=30) 
priority = models.IntegerField(max_length=3) 
color = RGBColorField() 

Это показывает только самые последние уведомления независимо от типа уведомления. Любое предложение?

UPDATE

теперь я вставил уведомления в список. , но в этом способов не работает моя идея, если notification_type значение приоритета (уникальное целое) не существует, чтобы добавить в список

notifications=[]  
if n.objects.filter(notification_type__priority=notifications).exists(): 
    notifications.append(n) 

ответ

0

Вы могли бы захватить все уведомления по отдельности, а затем объединить их в один QuerySet:

c1 = Notification.objects.filter(condition=[CONDITION1_HERE]). \ 
    exclude(notification_user__in=users). \ 
    order_by('notificationType__priority','-start_date')[:1] 

c2 = Notification.objects.filter(condition=[CONDITION2_HERE]). \ 
    exclude(notification_user__in=users). \ 
    order_by('notificationType__priority','-start_date')[:1] 

notifications = c1 | c2 # A QuerySet that merges c1 and c2 

Это может быть умнее, используя для цикла, так что вы можете использовать **condition вместо того, чтобы определить [CONDITION1_HERE] и [CONDITION2_HERE], но я должен был бы увидеть, что модель выглядит.

+0

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

+0

Вот что я подумал - каким-то образом вы можете немного взглянуть на модель? Это поможет мне дать динамическое решение. – Hybrid

+0

добавили свои модели, запросил –

0

Сделайте запрос от NotificationType и extra последним связанным уведомлением. Вы можете обратиться к документам django выше или this question для дальнейшего вдохновения.

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