我在模型中有一个具有唯一约束的字段。
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会自动执行此操作,但是现在出现错误。你能帮我吗?谢谢!
答案 0 :(得分:0)
Django不会自动处理此问题,因为当用户名实际上是默认user
的一部分时,您会将其放在Profile中。
您的选择:
假设您的CustomUser
扩展了User
,则可以在其中使用默认的user
而不是在配置文件中使用用户名。
向您的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
这就是我为原始用户模型修改代码以进行验证的方式。