Django - когда уникальное ограничение не выполняется, не разрешайте отправлять форму, пока пользователь не изменит поле - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть поле в модели с уникальным ограничением.

class Profile(models.Model):
    user = models.OneToOneField(CustomUser,default=None, null=True,on_delete=models.CASCADE,)
    username = models.CharField(max_length = 200, blank = True, unique = True) 
    summary = models.TextField(max_length = 5000, blank = True)

Я использую эту модель для формы ниже.

class ProfileForm(forms.ModelForm):

    class Meta:
        exclude = ['user']
        model = models.Profile

Вот как я использую эту форму вHTML-страница

<form method="post" class="text-left subscription-form">
                            {% csrf_token %}
                            {% bootstrap_form form %}
                            <input type="submit" class='btn btn-default' value="Update Profile">
                        </form>

Когда пользователь вводит имя пользователя, которое уже присутствует в базе данных, я хочу, чтобы форма не отправлялась, но вместо этого должно отображаться сообщение о том, что имя пользователя уже завершено.Я думаю, что Django автоматически использовал для этого, но теперь я получаю ошибку.ты можешь помочь мне с этим?Спасибо!

1 Ответ

0 голосов
/ 20 сентября 2019

Django не будет обрабатывать это автоматически, потому что вы вводите имя пользователя в профиль, когда оно фактически является частью значения по умолчанию user.

Ваш выбор:

  1. Предполагая, что ваш CustomUser расширен User, вы можете просто использовать в нем значение по умолчанию user вместо имени пользователя впрофиль.

  2. Добавьте что-то подобное к вашему ProfileForm

    def clean_username(self):
        username = self.cleaned_data.get('username')
        if username and Profile.objects.filter(username__iexact=username).exists():
            self.add_error('username', 'A user with that username already exists.')
        return username

Так я адаптировал свой код для исходной модели пользователя для проверкиЭто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...