class Badge(Model):
# ....
class Meta:
unique_together = ('identifier', 'restaurant')
使用一个CreateView
,当创建一个其标识符已经存在的Badge
对象时,我实际上收到了一个表单错误,这是预期的行为。
但是,使用UpdateView
时,在编辑其标识符已经存在的Badge
对象时,我不会遇到任何形式错误,但是会出现duplicate key value violates unique constraint
的500错误。
我不明白为什么行为会有所不同。我希望在两种情况下都显示表单错误。
答案 0 :(得分:1)
我刚刚意识到要进行验证,即使在用户不应该填写所有字段的情况下,也必须在基于类的视图中指定所有字段。
class BadgesUpdateView(UpdateView):
model = Badge
# restaurant field must be included for validation even if the user does NOT fill it.
fields = ('identifier', 'is_active', 'owner', 'restaurant')
def get_form(self, form_class=None):
form = super().get_form(form_class)
form.fields['restaurant'].widget = forms.HiddenInput()
return form