У меня есть этот код:Выбор строки с поля первичного ключа = NULL
object_id = request.POST.get('id')
try:
object = request.user.object_set.get(id=object_id, flag=False)
except Object.DoesNotExist:
object = None
Я думал, если object_id == None
, я всегда буду получать object == None
. Но нет! Когда object_id
None, я получаю object
от DB! Я использовал удаленную отладку и проверил, что в первый раз я оцениваю request.user.object_set.get(id=object_id, flag=False)
У меня есть экземпляр объекта, а во второй раз я оцениваю этот код, я получил исключение DoNotExist.
Я переписал этот код, чтобы явно проверить object_id
и только затем попросить DB получить объект. Мне просто интересно - почему это может случиться? Некоторые проблемы с кешем? Также небольшая заметка - она работает как ожидается на локальном компьютере (Windows 7), она работает не только на сервере (CentOS), но и в той же версии Python/Django.
Проверьте БД, что первичный ключ она имеет для этой записи. Возможно, ни один не был правильно отображен в NULL, но является 0 или словом «Нет» или что-то в этом роде. – Thilo
Поле первичного ключа не может быть нулевым. Если вы говорите о таблице пуст, то она также не вернет ни одну строку. Да, если вы хотите выбрать любую строку со значением NULL, тогда вам нужно использовать 'значение NULL'. Вы не можете использовать 'value = NULL'. Надеюсь, это поможет. – vijay
Спасибо за предложения. Таблица не пуста, все идентификаторы являются положительными целыми числами (1..30). Я посмотрел на SQL, и это было «WHERE id IS NULL» - кажется правильным. Я думаю, что это может быть связано только с Django каким-то образом ... – demalexx