Django.db.utils.IntegrityError: (1062, «Дубликат записи для ключа «имя пользователя»)» ⇐ Python

Программы на Python
Anonymous
Django.db.utils.IntegrityError: (1062, «Дубликат записи для ключа «имя пользователя»)»

Сообщение Anonymous »

У меня есть следующая реализация пользовательской модели в моем приложении Django:

users/models.py

Код: Выделить всё

class UserManager(BaseUserManager):
use_in_migrations = True

def _create_user(self, email: str,
password: str, is_staff: bool,
is_superuser: bool, **extra_fields):
"""Creates and saves a User with the given email and password.
"""
email = self.normalize_email(email)
user = self.model(email=email, is_staff=is_staff, is_active=True,
is_superuser=is_superuser, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user

def create_user(self, email: str, password=None, **extra_fields):
return self._create_user(email, password, False, False, **extra_fields)

def create_superuser(self, email: str, password: str, **extra_fields):
return self._create_user(email, password, True, True, **extra_fields)

class User(AbstractUser, UUIDModel):
first_name = models.CharField(max_length=30, blank=True)
last_name = models.CharField(max_length=30, blank=True)
email = models.EmailField(unique=True, db_index=True)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=False)
date_joined = models.DateTimeField(default=timezone.now)

USERNAME_FIELD = 'email'
objects = UserManager()

class Meta:
verbose_name = 'user'
verbose_name_plural = 'users'
ordering = ('-date_joined', )

def get_full_name(self):
return "{} {}".format(self.first_name, self.last_name)

def get_short_name(self):
return self.first_name

def get_email(self):
return self.email

def __str__(self):
return "{}".format(self.email)
И моя форма изменения в admin.py выглядит так:

Код: Выделить всё

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as AuthUserAdmin
from django.contrib.auth.forms import UserChangeForm as DjangoUserChangeForm
from django.contrib.auth.forms import UserCreationForm as DjangoUserCreationForm

from .models import User

# Forms
# ----------------------------------------------------------------------------
class MyUserCreationForm(DjangoUserCreationForm):
class Meta:
model = User
fields = ("email",)

class MyUserChangeForm(DjangoUserChangeForm):
class Meta:
model = User
fields = '__all__'

# ModelAdmins
# ----------------------------------------------------------------------------
@admin.register(User)
class UserAdmin(AuthUserAdmin):
add_form_template = 'admin/auth/user/add_form.html'
model = User
fieldsets = (
(None, {'fields': ('email', 'password')}),
('Personal info', {'fields': ('first_name', 'last_name',)}),
('Permissions', {'fields': ('is_active', 'is_staff', 'is_superuser',
'groups', 'user_permissions')}),
('Important dates', {'fields': ('last_login', 'date_joined')}),
)
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('email', 'password1', 'password2'),
}),
)
readonly_fields = ('date_joined', 'last_login')
form = MyUserChangeForm
add_form = MyUserCreationForm
list_display = ('email', 'first_name', 'last_name', 'is_active')
list_filter = ('is_superuser', 'is_active')
search_fields = ('first_name', 'last_name', 'email')
ordering = ('email',)
Я добавил эти две строки в свои файлы settings.py.

Код: Выделить всё

AUTH_USER_MODEL = 'users.User'
AUTHENTICATION_BACKENDS = (
"django.contrib.auth.backends.ModelBackend",)
Я расширил эту модель до модели пользовательского профиля. Но когда я пытаюсь создать другого пользователя, я получаю следующую ошибку django.db.utils.IntegrityError: (1062, «Дубликат записи '' для ключа 'имя пользователя'») . Может ли кто-нибудь помочь мне с этим?

Я использую Django: Django==2.2 с MySql.

Подробнее здесь: https://stackoverflow.com/questions/554 ... y-username

Вернуться в «Python»