Django «<object> соответствующий запрос не существует», когда я вижу его в базе данных - PullRequest
9 голосов
/ 16 марта 2010

Моя модель выглядит так:

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 предметов "Посоха". Я также могу видеть их в базе данных. Я проверяю одно из значений:

>>> 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 ]

8 голосов
/ 16 марта 2010

Попробуйте

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

u сообщает Python / Django, что это строка Unicode, а не просто старая str, и в вашем примере s[0].NameFirst это значение отображается как двойные кавычки.

2 голосов
/ 18 января 2012

Имя сохранено в базе данных с лишними двойными кавычками. Итак, если вы хотите поймать эту запись, правильный код:

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

… вместо:

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

Если вы не уверены, что этот запрос вернет результат, вы должны добавить обработку исключений, что-то вроде этого:

try:
    a = Staff.objects.get(NameFirst='"ANDREA"')
except Exception:
    a = None
2 голосов
/ 16 декабря 2010

Я столкнулся с той же проблемой, вот решение:

from django.db import reset_queries, close_connection
close_connection()
reset_queries()
0 голосов
/ 19 июня 2012

Подобная вещь произошла со мной. Я смог решить эту проблему, поместив что-то в базу данных для возврата запроса.

Это не совсем так, как у вас, но это был первый хит в Google, поэтому я решил поделиться.

0 голосов
/ 16 марта 2010

Я сталкивался с подобными проблемами раньше.

Я не совсем уверен, почему, но грубое 'get' имеет тенденцию вызывать у меня проблемы. Поэтому я обычно использую фильтр вместо того, чтобы получить первый результат.

a = Staff.objects.filter(NameFirst='ANDREA')
result = a[0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...