带有Django的不区分大小写的自动完成

带有Django的不区分大小写的自动完成,django,django-models,autocomplete,Django,Django Models,Autocomplete,我将jQueryUIAutoComplete小部件与Django结合使用,以查找“标记”,供用户进行筛选。我们的数据库准确地保存了用户最初输入标签的方式,因此“测试”和“测试”是不同的;但是,在这种自动完成的情况下,我希望用户在自动完成字段中键入“te”时只看到“Test” 目前,我使用以下命令返回可能的标记列表: tags = DBTag._model_class.objects.filter(tag__istartswith=term,author_token=self.my_token).

我将jQueryUIAutoComplete小部件与Django结合使用,以查找“标记”,供用户进行筛选。我们的数据库准确地保存了用户最初输入标签的方式,因此“测试”和“测试”是不同的;但是,在这种自动完成的情况下,我希望用户在自动完成字段中键入“te”时只看到“Test”

目前,我使用以下命令返回可能的标记列表:

tags = DBTag._model_class.objects.filter(tag__istartswith=term,author_token=self.my_token).distinct('tag')
found = [{'label':"%s" % tag.tag, 'value': "%s" % tag.tag} for tag in tags]
return to_json(found)
但这会返回“Test”和“Test”。有什么想法吗


编辑:从python循环中删除了“token”,因为它是不需要的。

为了只获得唯一的标记文本匹配,我认为这应该可以:

tag_text = BGTag._model_class.objects.filter(tag__istartswith=term, author_token=self.my_token).extra(select={'lc_tag': 'LOWER(tag)'}).values_list('lc_tag', flat=True).distinct()

您是特别想要caps的第一个版本,还是只想要标签的一个版本?另外,对于两个不同的测试标签,
tag.token
属性是否会不同?我想要一个版本的标签(因此用户只看到“test”,而不是“test”和“test”)。我可以使用python,但我更感兴趣的是是否可以使用某种形式的“distinct”/model方法。关于代币,是的,他们会有所不同,但那块地实际上是一个遗迹,不应该在那里。我单独调用了与“tag”关联的所有项,因此此时它不区分大小写。我问的是
tag.token
,因为如果您只需要
tag.tag
文本,您可以在DB级别使用
extra
来选择小写的标记名,然后使用
values\u list
来提取该文本。如果您还需要PK或其他标记属性,但希望每个小写标记名只获得一个PK,但还希望获得包含查询的多个标记,只要它们不共享名称,我认为您必须在Python中进行此操作。现在,您最初描述的内容将实现此目的(我只需要tag.tag文本)。如果你有一个例子,这将是伟大的,但我会去查文件了!我已经添加了一个示例作为答案-我手头没有提供精确测试用例的模型,但它可以很好地返回我用户的独特小写电子邮件地址等内容。