Django get / filter方法默认精确查找不起作用

时间:2014-09-28 15:46:26

标签: django django-models

我正在尝试编写查询来搜索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>

同样的行为。

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

2 个答案:

答案 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和collat​​ion pg_catalog。“default”,这是区分大小写的。