【问题标题】:Django get/filter method default exact lookup not workingDjango get/filter 方法默认精确查找不起作用
【发布时间】:2014-11-23 01:28:59
【问题描述】:

我正在尝试编写一个查询来搜索 myapp 的模型,但是。正如官方Django documentationlink 中所述,如果不正常工作,__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 fieldname='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>

同样的行为。

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

【问题讨论】:

    标签: django django-models


    【解决方案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.
    

    很快,这将取决于您的整理。我使用带有排序规则 pg_catalog."default" 的 Postgre,这是区分大小写的。

    【讨论】:

    • 我刚刚检查了我的 MySQL 服务器使用 latin1 作为默认字符集,latin1_swedish_c1 作为默认排序规则。
    【解决方案2】:

    使用的数据库表的排序规则是什么?即使您使用 __exact,并且您的表的排序规则设置为不区分大小写的变体,那么 __exact 的行为仍将类似于 __iexact。

    Django 的文档状态

    在 MySQL 中,数据库表的“排序规则”设置确定精确比较是否区分大小写。这是一个数据库设置,而不是 Django 设置。可以将 MySQL 表配置为使用区分大小写的比较,但需要进行一些权衡。有关这方面的更多信息,请参阅数据库文档中的排序规则部分。

    【讨论】:

      猜你喜欢
      • 2020-05-16
      • 1970-01-01
      • 2020-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-27
      • 2014-09-23
      相关资源
      最近更新 更多