2012-06-27 6 views
0

У меня есть этот код:Выбор строки с поля первичного ключа = 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.

+0

Проверьте БД, что первичный ключ она имеет для этой записи. Возможно, ни один не был правильно отображен в NULL, но является 0 или словом «Нет» или что-то в этом роде. – Thilo

+0

Поле первичного ключа не может быть нулевым. Если вы говорите о таблице пуст, то она также не вернет ни одну строку. Да, если вы хотите выбрать любую строку со значением NULL, тогда вам нужно использовать 'значение NULL'. Вы не можете использовать 'value = NULL'. Надеюсь, это поможет. – vijay

+0

Спасибо за предложения. Таблица не пуста, все идентификаторы являются положительными целыми числами (1..30). Я посмотрел на SQL, и это было «WHERE id IS NULL» - кажется правильным. Я думаю, что это может быть связано только с Django каким-то образом ... – demalexx

ответ

1

Возможно, данные вашего сообщения не отправляются, как ожидалось. Попробуйте распечатать object_id при запуске кода python и посмотреть, что вы получили. вы должны действительно подумать о том, чтобы сделать все PK как NOT NULL в вашей конфигурации базы данных. Для поиска нулевых значений, Никто не должен делать это

попробуйте установить значение по умолчанию для ваших почтовых данных

object_id = request.POST.get('id', None) 
+0

Я проверил, мой 'object_id' был None. Интересная вещь - в то время как 'object_id' - None, у выбранного объекта был id как 2 или 3 - положительное целое число! Плохая магия. – demalexx

+0

Какая версия django и какой БД вы используете? Я просто попробовал аналогичный querie в одном из моих проектов и получил ожидаемый результат (исключение ObjectDoesNotExist). –

+0

@brunodesthuilliers, 1.3, MySQL. Я думаю, что мы не можем найти причину сейчас - я изменил код на сервере, и я не могу воспроизвести его локально. Спасибо за помощь. – demalexx

Смежные вопросы