說我有一個manytomany字段,並說我有x個元素。使用django中的對象列表來查詢manytomany字段,返回具有相同ID的多行
class Distinct_Alert(models.Model):
alert_type = models.ForeignKey(Alert_Type, on_delete=models.CASCADE)
entities = models.ManyToManyField(to='Entity', through='Entity_To_Alert_Map')
objects = Utility_Manager()
class Entity(models.Model):
label = models.CharField(max_length=255, blank=False)
entity_type = models.ForeignKey(Entity_Type_Label)
related_entities = models.ManyToManyField('self')
identical_entities = models.ManyToManyField('self')
objects = Entity_Manager()
class Meta:
unique_together = ('label', 'entity_type')
我目前做的事情
Distinct_Alert.objects.filter(alert_type=alert_type, entities__in=[entity[0] for entity in entities]).all()
,但由於種種原因,這個查詢返回2個使用相同的ID不同的警報,任何想法,爲什麼?如果我添加distinct()來解決問題,但我試圖使用get,因爲表在技術上應該只有一個條目與該查詢匹配。
我最初做這個:
Distinct_Alert.objects.get_or_none(alert_type=alert_type, entities__in=[entity1, entity2....])
但隨後反彈這樣一個錯誤,get_or_none定義,像這樣
class Utility_Manager(models.Manager):
def get_or_none(self, **kwargs):
try:
return self.get(**kwargs)
except self.model.DoesNotExist:
return None
,但是這是行不通的,因爲我有2個元素是被返回的情況下,如果這些元素在同一個查詢中是不同的並且是匹配的,但是返回的行實際上是相同的行,那將是一種奇怪的情況。