Django-Filter按类型查询

时间:2015-05-06 15:34:29

标签: python mysql django django-views django-queryset

我想显示每种通知类型和最新通知的一个通知。 我的问题是如何获取每种通知类型并显示最新的通知类型。

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

这仅显示与通知类型无关的最新通知。 有什么建议吗?

更新

现在我将通知插入列表中。 但是这种方式不起作用 我的想法是,如果notification_type的优先级值(unique int)不存在,则添加到列表中

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

2 个答案:

答案 0 :(得分: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],但我需要看看是什么模特看起来像。

答案 1 :(得分:0)

从NotificationType和extra查询最新的相关通知。您可以参考上面的django文档或this question获取更多灵感。