我正在使用包django_autocomplete_light
。
我有一个名为Tag的简单模型:
class Tag(models.Model):
title = models.CharField(max_length=255)
选择所有代码时, django_autocomplete_light
会使用以下代码:
qs = Tag.objects.all()
这个问题是我正在构建的软件需要允许重复的标签(而不是我的决定)。这意味着如果有两个标签“男性”和“男性”,显然在QuerySet中会有重复。
我尝试通过更改查询来删除这些重复项,如下所示:
qs = Tag.objects.all().distinct()
但是我没有使用PostgreSQL,因此会导致错误。
因此我尝试了这种解决方法:
qs = Tag.objects.all().values_list('title', flat=True).distinct()
但这只会导致以下错误:
AttributeError: 'str' object has no attribute 'pk'
我尝试将查询更改为以下内容,但会导致另一个错误:
qs = Tag.objects.all().values_list('pk', 'title').distinct()
AttributeError: 'tuple' object has no attribute 'pk'
所以基本上我似乎需要保留id值,但不知何故删除了重复的标签。
不幸的是,我无法使用原始SQL查询,因为在以后的代码中,QuerySet会被多次处理。
有没有办法可以更改我的数据库查询,或者可能是从QuerySet手动删除重复项的方法?
任何帮助表示感谢。
谢谢。
答案 0 :(得分:0)
解决方法可以是以下内容。
首先,获取Tag模型的所有标题并将其放入set
:
unique_titles = set(Tag.objects.values_list('title', flat=True))
现在,每个标签标题都是唯一的。
只需过滤掉unique_titles
之类的标签:
unique_tags = Tag.objects.filter(title__in=unique_titles)