2015-08-16 79 views
0

我有这个问题。我在我的Django应用程序的模型中有两个对象,我有标签,并且我有包含多个标签的问题,它的多元关系。我试图创建具有Q对象,它是像这样的查询:Django icontains查询在manytomany关系中检索重复的行

questions = questions.filter(Q(title__icontains=searchwords) 
          |Q(tags__name__icontains=searchwords)) 

此查询的结果,可能能带给我重复的行和它的逻辑,因为,第二个条件是适用于每一个在问题中标记,例如,如果我对3个标签“Pepe”,“Pepi”和“Jose”有疑问,并且搜索词是“pe”,则查询将与“Pepe”和“Pepi” ,最后它将带回相应于同一个问题的2行。

所以我的问题是,我如何避免重复的行? (不想使用distinct()),Django中有像icontains中的东西,但只与第一个标记符合相匹配。

嗯,我在解释中尽我所能,对不起我的英语不好。 Greeteings。

+0

如果你反向查询,使用.exclude()和〜Q() –

回答

0

你需要使用distinct(),如果你不使用PostgreSQL,你也需要使用order_by()

questions = questions.filter(
    Q(title__icontains=searchwords)|Q(tags__name__icontains=searchwords) 
).order_by('some_field').distinct() 
+0

嗨,我已经有了明显的,但我尝试着提高这个查询,因为它的主要搜索的性能该应用程序,它有点慢。感谢您的建议,我会看看我是否可以通过某个领域进行优化。 –