Django ‘<object> 匹配的查询不存在’,但我能在数据库中看到它

9 投票
5 回答
24389 浏览
提问于 2025-04-15 20:29

我的模型长这样:

class Staff(models.Model):
    StaffNumber = models.CharField(max_length=20,primary_key=True)
    NameFirst = models.CharField(max_length=30,blank=True,null=True)
    NameLast = models.CharField(max_length=30)
    SchoolID = models.CharField(max_length=10,blank=True,null=True)
    AutocompleteName = models.CharField(max_length=100, blank=True,null=True)

我在用MySQL,如果这有影响的话。

从manage.py的命令行界面来看:

root@django:/var/www/django-sites/apps# python manage.py shell
Python 2.5.2 (r252:60911, Jan 20 2010, 21:48:48)
[GCC 4.2.4 (Ubuntu 4.2.4-1ubuntu3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from disciplineform.models import Staff
>>> s = Staff.objects.all()
>>> len(s)
406

所以我知道里面有406个“Staff”对象。我在数据库里也能看到它们。我检查了其中一个值:

>>> s[0].NameFirst
u'"ANDREA"'

这个值和我在数据库里看到的是一致的。现在我试着去“获取”这个对象。

>>> a = Staff.objects.get(NameFirst='ANDREA')
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/var/lib/python-support/python2.5/django/db/models/manager.py", line 93, in get
    return self.get_query_set().get(*args, **kwargs)
  File "/var/lib/python-support/python2.5/django/db/models/query.py", line 309, in get
    % self.model._meta.object_name)
DoesNotExist: Staff matching query does not exist.

咦?我测试过的所有列的所有值都是这样。我在view.py的代码里也得到了同样的结果。

我显然做错了什么。到底是什么呢?

5 个回答

2

名字在数据库里存储的时候多了个多余的双引号。所以,如果你想找到那条记录,正确的代码是:

a = Staff.objects.get(NameFirst='"ANDREA"')

…而不是:

a = Staff.objects.get(NameFirst='ANDREA')

如果你不能确定这个查询会返回结果,你需要加上异常处理,像这样:

try:
    a = Staff.objects.get(NameFirst='"ANDREA"')
except Exception:
    a = None
2

我也遇到了同样的问题,这里有个解决办法:

from django.db import reset_queries, close_connection
close_connection()
reset_queries()
8

试试这个

a = Staff.objects.get(NameFirst=u'"ANDREA"')

这里的 u 是告诉 Python/Django 这是一个 Unicode 字符串,而不是普通的 str 字符串。在你的 s[0].NameFirst 示例中,它显示的值包含了双引号。

撰写回答