我正在尝试编写查询来搜索myapp的模型但是。正如官方Django documentation
和此link中所述__exact查询的默认行为,如果不能正常工作。
例如:
>>> from django.db import models
>>> from girvi.models import State
>>> State.objects.all()
[]
>>> s = State.objects.create(name='Uttar pradesh')
>>> State.objects.get(name='uttar pradesh')
<State: Uttar pradesh>
以上查询不起作用。它应该返回[]
,因为我正在寻找name='uttar pradesh' against field
name ='Uttar pradesh'的字段
>>> State.objects.get(name__exact='uttar pradesh')
<State: Uttar pradesh>
>>> State.objects.get(name__iexact='Uttar Pradesh')
<State: Uttar pradesh>
>>> State.objects.get(name__exact='Uttar Pradesh')
<State: Uttar pradesh>
同样的行为。
请有人向我解释。我做错了什么。
答案 0 :(得分:2)
使用的数据库表的排序规则是什么?即使你使用__exact,并且你的表的排序规则被设置为不区分大小写的变体,那么__exact仍然会像__iexact一样。
Django的文档陈述
在MySQL中,数据库表的“排序规则”设置确定精确比较是否区分大小写。这是一个数据库设置,而不是Django设置。可以将MySQL表配置为使用区分大小写的比较,但需要进行一些权衡。有关此内容的详细信息,请参阅数据库文档中的排序规则部分。
答案 1 :(得分:1)
上面的答案是正确的,因为我已经在这里试过,看看发生了什么
>>> a = Postagem.objects.get(titulo = "Snippets Sublime text")
>>> a
<Postagem: 13 - Snippets Sublime text, 2014-09-17 00:37:08.268915+00:00>
>>> a = Postagem.objects.get(titulo = "snippets sublime text")
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/gpzim98/deploy/virtualenvs/BlogGP/local/lib/python2.7/site-ackages/django/db/models/manager.py", line 151, in get
return self.get_queryset().get(*args, **kwargs)
File "/home/gpzim98/deploy/virtualenvs/BlogGP/local/lib/python2.7/site-packages/django/db/models/query.py", line 307, in get
self.model._meta.object_name)
DoesNotExist: Postagem matching query does not exist.
很快,这将取决于你的整理。我使用Postgre和collation pg_catalog。“default”,这是区分大小写的。