Django выдает "django.db.utils.IntegrityError: duplicate key value violates unique constraint" после добавления нового поля
После добавления еще одного поля с параметром unique
в мою модель UserProfile
я получаю следующую ошибку при отправке формы регистрации, которая требует это поле:
django.db.utils.IntegrityError: дублирующее значение ключа нарушает уникальность ограничение "user_userprofile_pseudonym_key" DETAIL: Ключ (псевдоним)=() уже существует.
Я очистил всю базу данных, удалил все файлы миграций и мигрировал все полностью заново и с чистого листа, но это не помогло.
Все работало хорошо до добавления pseudonym
в качестве дополнительного поля в модель.
# html
<form hx-post="{% url 'signup' %}"
hx-swap="outerHTML"
class="form shadow-2xl min-w-[360px] max-w-[360px] p-4 bg-surface rounded-lg text-white"
>
{% csrf_token %}
<!-- form headline -->
<h1 class="form-headline text-2xl text-surface-dark text-center mb-2">Create a new account</h1>
{% if form.errors %}
<div class="error-wrapper mb-2 p-2 bg-error rounded text-white">
<div class="errors text-center">{{ form.errors.pseudonym }}</div>
<div class="errors text-center">{{ form.errors.email }}</div>
<div class="errors text-center">{{ form.errors.password2 }}</div>
</div>
{% endif %}
<div class="username-wrapper field-wrapper mb-2">
<div class="tag name-tag p-1 text-sm">{{ form.pseudonym.label }}*</div>
<div class="input text-woys-purple text-surface-dark">{{ form.pseudonym }}</div>
</div>
...
</form>
# forms.py
class SignUpForm(UserCreationForm):
pseudonym = forms.CharField(required=True, widget=forms.TextInput(attrs={'class': tailwind_class}))
email = forms.EmailField(required=True, widget=forms.EmailInput(attrs={'class': tailwind_class}))
password1 = forms.CharField(label='Password', widget=forms.PasswordInput(attrs={'class': tailwind_class}))
password2 = forms.CharField(label='Confirm Password', widget=forms.PasswordInput(attrs={'class': tailwind_class}))
class Meta:
model = get_user_model()
fields = ('email', 'password1', 'password2')
# models.py
class UserProfile(AbstractBaseUser, PermissionsMixin):
# Unique identifier
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
# Email and name + pseudonym of the user
email = models.EmailField(max_length=255, unique=True)
name = models.CharField(max_length=255)
pseudonym = models.CharField(max_length=15, unique=True, validators=[RegexValidator(regex='^.{4}$', message='Length has to be min. 4', code='nomatch')])
# Privilege and security booleans
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
is_active = models.BooleanField(default=False)
email_confirmed = models.BooleanField(default=False)
objects = UserProfileManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
def email_user(self, subject, message, from_email=None, **kwargs):
"""Send mail to user - Copied from original class"""
send_mail(subject, message, from_email, [self.email], **kwargs)
def __str__(self):
return self.email
Я использую PostgreSQL.