【问题标题】:Model form can't validate without all fields present?如果没有所有字段,模型表单就无法验证?
【发布时间】:2013-03-02 16:11:02
【问题描述】:

我有一个模型表单无法通过验证,因为我不想显示模板中的某些字段,它们对用户并不重要,但它们是模型的一部分,它们的值是动态生成。如何将这些字段设置为表单中不需要(它们的值在 POST 之后生成),以便表单可以通过验证,并且它们应该在模型中是必需的?

【问题讨论】:

    标签: django django-forms


    【解决方案1】:

    使用模型实例用数据填充表单。而不是form = Form(),你会得到一个模型的实例,你将要保存到——model_object = Model.objects.get(id=27)——(或者你可能会获取它),然后使用form = Form(instance=model_object)。这将使用模型数据填充字段。

    如果您希望排除字段以便动态计算值,请尝试以下步骤:

    class Form(forms.ModelForm):
        class Meta:
            model = Model
            exclude = ('field_name', 'field_name', 'field_name', ...) # the fields you want to exclude
    

    然后:

    def View(request):
        if request.POST:
            form = Form(request.POST)
            if form.is_valid():
                model_object = form.save(commit=False) # an unsaved model object
                model_object.field = some dynamic value
                model_object.another_field = some other dynamic value
                model_object.save() # save the model, ignore the form
    

    更多信息,您可以查看:Setting user_id when saving in view - Django

    更新:我在 Form 的排除行中在 'field_name' 周围添加了引号

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-21
      • 1970-01-01
      • 2017-09-14
      • 2014-11-08
      • 2018-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多