【问题标题】:Django: different behaviour in CreateView and UpdateView with unique constraintDjango:具有唯一约束的 CreateView 和 UpdateView 中的不同行为
【发布时间】:2019-10-06 05:36:37
【问题描述】:
class Badge(Model):
    # ....

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

  • 但是,使用UpdateView,在编辑标识符已存在的Badge 对象时,我没有收到任何表单错误,而是duplicate key value violates unique constraint 出现500 错误。

    李>

我不明白为什么行为不同。我希望在这两种情况下都显示表单错误。

【问题讨论】:

  • 你能分享一下你的CreateViewUpdateView的实现吗?
  • 我刚刚发现我的错误,谢谢:)

标签: python django django-forms django-class-based-views


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-27
    • 2015-06-25
    • 2016-10-08
    • 1970-01-01
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    相关资源
    最近更新 更多