簡單的模型在標籤字段上具有多對多關係。Django過濾器推演ManyToMany
class Tag(models.Model):
description = models.TextField()
class Species(models.Model):
name = models.CharField(max_length=256)
tags = models.ManyToManyField(Tag)
現在我試着這一點,據我瞭解,它應該返回一個,每一個tag_description在標籤列表匹配列表:
tag_list = request.GET.get('q').split(',')
species = Species.objects.filter(reduce(and_, [Q(tags__description=c) for c in tag_list]))
但它返回一個空列表。它應該返回一些對象。
它工作時,我給它只是一個標籤
任何想法,爲什麼發生這種情況?
進出口使用它作爲這個答案顯示: https://stackoverflow.com/a/8636836/228660
啊哈,謝謝!但是這會給我一個基於OR的列表。在那裏,因爲我只想要與列表中的所有項目匹配的產品 – Harry 2014-09-13 09:57:16
糟糕...您是對的,在這種情況下,並不像我希望的那麼容易:)我會更新答案。 – Wolph 2014-09-13 10:00:54
很好,這個工程。它會如何比較:\t species = Species.objects.filter(tags__description__in = tag_list).annotate(num_tags = Count('tags__description')).filter(num_tags = len(tag_list)) – Harry 2014-09-13 10:12:55