2012-06-30 1 views
0

У меня установлен uuid, чтобы быть уникальным в модели, и следующий код должен предотвращать любые проблемы с дублированием, но если uuid уже существует, он генерирует IntegrityError.Django IntegrityError, хотя я проверяю наличие существующей записи

Похоже, что get возвращает false, даже если есть видео объект с запрошенным uuid. Любая идея, почему это может произойти?

try: 
    v = Video.objects.get(uuid = video_id) 
except Video.DoesNotExist: 
    v = Video(uuid = video_id) 
    v.save() 
+0

Является ли 'uuid' основным ключом на видеообъекте? Если это так, попробуйте 'Video.objects.get (pk = video_id)'. «Pk» - это небольшой обман для ссылки на первичный ключ таблицы. – Endophage

+0

Нет, это не первичный ключ, но он также уникален – lionheart

ответ

0

IntegrityError ожидаемое исключение, которое будет поднят, когда происходит что-то как дубликат ключа. Вот как вы поймаете ситуацию.

То, что вы должны сосредоточить внимание на это неисправной запрос:

v = Video.objects.get(uuid = video_id) 

Если вы знаете, за то, что объект Video уже существует с video_id, то вы должны проверить, чтобы убедиться, что тип video_id является верный. Кроме того, ожидается, что остальная часть поведения будет ожидаться.

+0

Я тоже пробовал это, и в этом случае он генерирует ошибку DoNotExist. Я полностью в тупике. \t \t 'попробовать: \t \t \t v = Видео (UUID = UUID) \t \t кроме IntegrityError: \t \t \t v = Video.objects.get (UUID = UUID)' – lionheart

+0

Вы должны попытаться напечатать 'VIDEO_ID 'value и' type (video_id) 'и подтвердить, что оно соответствует значению базы данных. Кроме того, из 'python manage.py shell' вы можете просто выполнить запрос для' video_id'? – jdi

+0

Да, все, кажется, все в порядке. Но получение ничего не возвращает. Может ли это как-то связать Юникод? – lionheart

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