Django-当唯一约束失败时,在用户更改字段之前,不允许提交表单

时间:2019-09-20 02:41:46

标签: django django-forms

我在模型中有一个具有唯一约束的字段。

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 :(得分:0)

Django不会自动处理此问题,因为当用户名实际上是默认user的一部分时,您会将其放在Profile中。

您的选择:

  1. 假设您的CustomUser扩展了User,则可以在其中使用默认的user而不是在配置文件中使用用户名。

  2. 向您的ProfileForm

  3. 添加类似的内容
    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

这就是我为原始用户模型修改代码以进行验证的方式。

相关问题