2016-01-19 1 views
3

я получил следующую ошибку ДжангоКак можно django пройти через DoNotExist, а затем поднять «Duplicate entry»?

File "./project/auth_backend.py", line 31, in authenticate 
user.save() 
... 
IntegrityError: (1062, "Duplicate entry 'user_name' for key 'username'") 

Указанный файл содержит следующий код (который основан на https://docs.djangoproject.com/en/1.8/topics/auth/customizing/#writing-an-authentication-backend)

try: 
    user = User.objects.get(username=username) 
except User.DoesNotExist: 
    user = User(username=username, password=password) 
... 
user.save() 

Кажется, что так или иначе он поднял User.DoesNotExist, даже если он на самом деле делает существовать. Моя база данных - это MySQL.

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

+1

Вы пытались создать «Пользователь» с помощью документированного метода 'create_user'? 'user = User.objects.create_user ('john', '[email protected]', 'johnpassword')' :: https://docs.djangoproject.com/en/1.9/topics/auth/default/#user -объекты – Hybrid

+0

Эта проблема возникает всегда или только иногда? Пожалуйста, покажите все функции 'authenticate'. –

+0

@hybrid Я еще не пробовал. Насколько отличается от моего текущего кода? Обратите внимание, что в этом примере я не думаю, что в первую очередь это должно было вызвать User.DoesNotExist, что означает, что если он ведет себя правильно, он не достигнет части создания пользователя. – Dynameyes

ответ

0

У меня была аналогичная проблема. Это было из-за несогласованности в моей базе данных. _seq был устаревшим в базе данных. Чтобы исправить это, попробуйте использовать функцию sqlsequencereset в файле manage.py. Он печатает все команды, которые вы должны выполнить в своей базе данных ... Для получения дополнительной информации см. here.

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