Как избежать ошибки дублирования ключей с помощью django allauth?

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

IntegrityError at /accounts/signup/
duplicate key value violates unique constraint "users_user_username_key"

Я не уверен, что вызывает ошибку

Это forms.py:

from django.contrib.auth import get_user_model, forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _

User = get_user_model()


class UserChangeForm(forms.UserChangeForm):
    class Meta(forms.UserChangeForm.Meta):
        model = User


class UserCreationForm(forms.UserCreationForm):

    error_message = forms.UserCreationForm.error_messages.update(
        {
            "duplicate_username": _(
                "This username has already been taken."
            )
        }
    )

    class Meta(forms.UserCreationForm.Meta):
        model = User

    def clean_username(self):
        username = self.cleaned_data["username"]

        try:
            User.objects.get(username=username)
        except User.DoesNotExist:
            return username

        raise ValidationError(
            self.error_messages["duplicate_username"]
        )

settings.py

# django-allauth
# ------------------------------------------------------------------------------
ACCOUNT_ALLOW_REGISTRATION = env.bool(
    "DJANGO_ACCOUNT_ALLOW_REGISTRATION", True
)
# https://django-allauth.readthedocs.io/en/latest/configuration.html
ACCOUNT_AUTHENTICATION_METHOD = "username"
# https://django-allauth.readthedocs.io/en/latest/configuration.html
ACCOUNT_EMAIL_REQUIRED = True
# https://django-allauth.readthedocs.io/en/latest/configuration.html
ACCOUNT_EMAIL_VERIFICATION = "mandatory"
# https://django-allauth.readthedocs.io/en/latest/configuration.html
ACCOUNT_ADAPTER = "pharmhand.users.adapters.AccountAdapter"
# https://django-allauth.readthedocs.io/en/latest/configuration.html
SOCIALACCOUNT_ADAPTER = (
    "pharmhand.users.adapters.SocialAccountAdapter"
)

# Your stuff...
# ------------------------------------------------------------------------------
ACCOUNT_SIGNUP_FORM_CLASS = 'users.forms.UserCreationForm'

И models.py

from django.contrib.auth.models import AbstractUser
from django.db import models
from django.urls import reverse
from django.utils.translation import gettext_lazy as _


class User(AbstractUser):

    # First Name and Last Name Do Not Cover Name Patterns
    # Around the Globe.
    name = models.CharField(
        _("Name of User"), blank=True, max_length=255
    )

    title = models.CharField(
        _("Title"), null=True, max_length=10, default='Dr'
    )

    first_name = models.CharField(
        _("First Name"), null=True, max_length=255, default='test'
    )

    last_name = models.CharField(
        _("Last Name"), null=True, max_length=255, default='Test'
    )

    job_title = models.CharField(
        _("Job Title"), null=True, max_length=255, default='Test'
    )

    address1 = models.CharField(
        _("Address 1"), null=True, max_length=255, default='Test'
    )

    address2 = models.CharField(
        _("Address 2"), null=True, max_length=255, default='Test'
    )

    address3 = models.CharField(
        _("Address 3"), null=True, max_length=255, default='Test'
    )

    city = models.CharField(
        _("City"), null=True, max_length=255, default='Test'
    )

    post_code = models.CharField(
        _("Post Code"), null=True, max_length=255, default='Test'
    )

    def get_absolute_url(self):
        return reverse(
            "users:detail", kwargs={"username": self.username}
        )

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

Проблемы были

ACCOUNT_SIGNUP_FORM_CLASS = 'users.forms.UserCreationForm'

Я добавил это, чтобы иметь возможность редактировать форму регистрации (что стало возможным), но это привело к побочному эффекту, я думаю, что и allauth, и contrib.auth пытались создать пользователя, что привело к ошибке. Удаление строки устранило ошибку (хотя я все еще пытаюсь понять, как редактировать поля формы регистрации)

Вернуться на верх