Django:CreateView和UpdateView中的不同行为具有唯一约束

2024-04-29 20:03:31 发布

您现在位置:Python中文网/ 问答频道 /正文

class Badge(Model):
    # ....

    class Meta:
        unique_together = ('identifier', 'restaurant')
  • 使用CreateView,当创建标识符已经存在的Badge对象时,我实际上得到了一个表单错误,这是预期的行为。

  • 但是,使用UpdateView,当编辑标识符已经存在的Badge对象时,我没有得到任何形式错误,而是duplicate key value violates unique constraint的500错误。

我不明白为什么行为不同。我想在两种情况下都显示表单错误。你知道吗


Tags: 对象badge编辑表单model错误标识符restaurant
1条回答
网友
1楼 · 发布于 2024-04-29 20:03:31

我刚刚意识到,为了验证工作,所有字段都需要在基于类的视图中指定,即使这些字段不应由用户填充。你知道吗

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

相关问题 更多 >