2015-05-06 100 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的優先級值(唯一INT)不存在,要添加到列表中

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 

這可以通過使用一個for循環,這樣就可以使用**condition,而不必定義[CONDITION1_HERE][CONDITION2_HERE]做出更聰明,但我需要看到什麼型號的樣子。

+0

不錯,但有一個問題。通知類型是動態的,這意味着用戶可以添加他自己的通知類型,如果我有2個以上的方式不工作 –

+0

這就是我的想法 - 任何方式你可以看看模型?這將幫助我提供一個動態的解決方案。 – Hybrid

+0

增加了模型,要求 –

0

從NotificationType和extra中查詢最新的相關通知。你可以參考上面的django文檔或this question以獲得更多靈感。