这是一个简单的模型,字段是唯一的:
class UserProfile(models.Model):
nickname = models.CharField(max_length=20, unique=True)
surname = models.CharField(max_length=20)
视图允许用户使用ModelForm 修改他们的个人资料:
class UserProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
def my_profile(request):
...
if request.method == 'GET':
# Below, 'profile' is the profile of the current user
profile_form = UserProfileForm(instance=profile)
else:
profile_form = UserProfileForm(request.POST)
if profile_form.is_valid():
... # save the updated profile
return render(request, 'my_profile.html', {'form': form})
问题是,如果用户未更改其昵称,is_valid()
始终返回False
,因为唯一性检查。我需要唯一性检查,因为我不希望一个用户将其昵称设置为其他用户,但它不应该阻止用户将其昵称设置为其当前昵称。
我是否必须重写表单的验证,或者我更容易错过哪些内容?
答案 0 :(得分:2)
您必须将实例传递给未绑定和绑定的表单:
else:
profile_form = UserProfileForm(request.POST, instance=profile)
if profile_form.is_valid():
... # save the updated profile
这将确保更新当前用户的个人资料,而不是创建新的个人资料。