2014-09-28 29 views
0

我想写一个查询来搜索myapp模型但是。正如官方Django documentation和这里link中所述,__exact查找的默认行为如果不能正常工作。Django获取/过滤方法默认精确查找不起作用

例如:

>>> 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名='北方邦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> 

再次相同的行为。

请有人解释给我。我做错了什么。

回答

1

使用的数据库表的排序规则是什么?即使使用__exact,并且表的排序规则设置为不区分大小写的变体,那么__exact仍然会像__iexact一样运行。

Django的文档状态

在MySQL,数据库表中的“整理”设置确定确切比较是否是大小写敏感的。这是一个数据库设置,而不是Django设置。可以将MySQL表配置为使用区分大小写的比较,但涉及一些权衡。有关详细信息,请参阅数据库文档中的整理部分。上述

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与collat​​ion pg_catalog。“default”,区分大小写。

+0

是的你是对的 – 2014-09-28 17:25:08

+0

我刚刚检查了我的MySQL服务器使用'latin1'作为默认字符集和'latin1_swedish_c1'作为默认排序规则。 – 2014-09-28 17:30:51