Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用自定义等价的django独特查询_Django_Models - Fatal编程技术网

使用自定义等价的django独特查询

使用自定义等价的django独特查询,django,models,Django,Models,假设我的模型如下所示: class Alert(models.Model): datetime_alert = models.DateTimeField() alert_type = models.ForeignKey(Alert_Type, on_delete=models.CASCADE) dismissed = models.BooleanField(default=False) datetime_dismissed = models.DateTimeFie

假设我的模型如下所示:

class Alert(models.Model):
    datetime_alert = models.DateTimeField()
    alert_type = models.ForeignKey(Alert_Type, on_delete=models.CASCADE)
    dismissed = models.BooleanField(default=False)
    datetime_dismissed = models.DateTimeField(null=True)
    auid = models.CharField(max_length=64, unique=True)
    entities = models.ManyToManyField(to='Entity', through='Entity_To_Alert_Map')
    objects = Alert_Manager()

    def __eq__(self, other):
        return isinstance(other,
                          self.__class__) and self.alert_type == other.alert_type and \
               self.entities.all() == other.entities().all() and self.dismissed == other.dismissed

    def __ne__(self, other):
        return not self.__eq(other)

我试图做到的是:如果解除状态、警报类型和关联实体相同,则两个警报对象是等效的。使用这种想法,是否可以编写一个查询,根据该条件请求所有不同的警报?选择所有这些,然后过滤掉它们似乎并不吸引人

你提到了一种方法,我不认为这很糟糕。我不知道Django有什么能做到这一点

然而,我想让你们想想为什么会出现这个问题?如果两个警报相等,如果消息、状态和类型相同,那么这可能是它自己的类。我会考虑创建另一个类<代码>区别符> />代码(或者更好的名字),并从代码>警告/代码>中得到这个类的外键。或者更好的是,有一个类是
警报
,还有一个类叫做
警报事件
(您的
警报
类)

这能解决你的问题吗

编辑:

实际上,有一种方法可以做到这一点。您可以组合
值()
distinct()
。这样,您的查询将

Alert.objects.all().values("alert_type", "dismissed", "entities").distinct()
这将返回一本字典


你提到了一种方法,我不认为这很糟糕。我不知道Django有什么能做到这一点

然而,我想让你们想想为什么会出现这个问题?如果两个警报相等,如果消息、状态和类型相同,那么这可能是它自己的类。我会考虑创建另一个类<代码>区别符> />代码(或者更好的名字),并从代码>警告/代码>中得到这个类的外键。或者更好的是,有一个类是
警报
,还有一个类叫做
警报事件
(您的
警报
类)

这能解决你的问题吗

编辑:

实际上,有一种方法可以做到这一点。您可以组合
值()
distinct()
。这样,您的查询将

Alert.objects.all().values("alert_type", "dismissed", "entities").distinct()
这将返回一本字典


回顾过去,我认为拥有一个独立的distinctalert类将非常有用。啊!为什么我一开始没想到这个?回顾过去,我认为拥有一个独立的distinctalert类将非常有用。啊!为什么我一开始没想到这个?非常感谢。