所以我有一个CreateView,它可以按我希望的方式工作99%。如果用户在整数字段中输入字母,则会告诉用户输入数字,如果用户将必填字段保留为空白,则会告诉用户需要填写。这很不错,CreateView会为我处理错误。但是,出于明显的原因,我不允许用户创建段子字段,这是通过将日期和另外两个字段组合起来并对其进行段塞来自动创建的。如果用户尝试创建不会导致唯一记录的记录,则该表单无效,但CreateView不会提供任何建设性反馈(除非您处于调试模式,否则UNIQUE约束将失败)。

如果我将下面的代码添加到我的CreateView中,那么我需要重新定义CreateView之前处理得很好的所有错误响应。

def form_invalid(self, form):
    return HttpResponse(#define stuff here)


有没有办法,我可以让CreateView正常处理无效的表单(就像我没有def form_invalid(self, form):一样),除非有弹冲突?

最佳答案

您可以通过在覆盖form_invalid的内部调用父类的form_invalid版本来实现。

例:

class MyCreateView(CreateView):
    def form_invalid(self, form):
        if my_condition:  # Check whatever you want
            return HttpResponse('reason it failed')
        else:  # Or call the parent class version
            return super(MyCreateView, self).form_invalid(form)

09-20 05:50