【问题标题】:Django-Filter query by typeDjango-按类型过滤查询
【发布时间】:2015-07-16 20:40:11
【问题描述】:

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

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 优先级值(唯一 int)不存在,添加到列表中

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您可以单独捕获所有通知,然后将它们合并为一个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],但我需要看看模型是什么样子的。

      【讨论】:

      • 很好,但是有一个问题。通知类型是动态的,这意味着用户可以添加自己的通知类型,如果我有超过 2 个这种方式不起作用
      • 我就是这么想的——你有什么办法可以稍微看一下模型吗?这将帮助我给出一个动态的解决方案。
      • 已添加模型,已请求
      猜你喜欢
      • 2016-03-11
      • 2015-08-05
      • 2018-09-01
      • 2013-08-16
      • 2016-07-10
      • 2014-05-05
      • 2018-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多