Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 在验证表单之前在视图中定义字段的值_Django_Forms - Fatal编程技术网

Django 在验证表单之前在视图中定义字段的值

Django 在验证表单之前在视图中定义字段的值,django,forms,Django,Forms,我有一个带有字段“status”的表单,该字段将由视图根据表单中某些字段的值进行设置 是否可以在form.is\u valid()之前执行此操作(否则该表单将无效) 我能想到的唯一方法是允许“status”字段为空,但这似乎不是一个好的设计 定义一个clean()方法来设置这些字段是一个更好的解决方案?如果状态字段不是由填写表单的用户设置的,那么它可能根本不应该出现在表单中 如果该值稍后用于创建/更新模型实例或其他内容,则最好只将视图确定的值包含在表单的保存方法中,如form.save(stat

我有一个带有字段“status”的表单,该字段将由视图根据表单中某些字段的值进行设置

是否可以在form.is\u valid()之前执行此操作(否则该表单将无效)

我能想到的唯一方法是允许“status”字段为空,但这似乎不是一个好的设计


定义一个clean()方法来设置这些字段是一个更好的解决方案?

如果状态字段不是由填写表单的用户设置的,那么它可能根本不应该出现在表单中

如果该值稍后用于创建/更新模型实例或其他内容,则最好只将视图确定的值包含在表单的保存方法中,如
form.save(status=my_status)
(如果是
ModelForm
)或在实例化模型时,否则


如果用户确实输入了状态,那么您可以使用一个自定义的
clean()
方法来确保它是一个可接受的值。

然后您应该使用此状态值初始化表单,然后隐藏字段

class StatusForm(forms.ModelForm):
    def __init__(self, *arg, **kwargs):
        super(StatusForm, self).__init__(*arg, **kwargs)
        # set needed value here and hide field

我相信OP希望使用表单中提交的值来确定状态,因此在
init
方法中设置它将不起作用,除非他使用原始POST数据(这通常是一个糟糕的计划)。我希望该字段可编辑(例如,在管理中),并且不允许为空(即使在管理中)。。。因此,form.save(status=my_status)似乎是一个很好的解决方案,但它不起作用,因为我应该在之前运行form.is_valid(),它将失败。我遗漏了什么吗?@LuisFernando,这里的模型和形式似乎有些混淆?您可以在模型中有一个表单中没有包含的必填字段——您只需确保在保存模型实例之前设置它(例如,如果您使用我提到的save选项)。如果您使用的是ModelForm,并且不希望包含该字段,则可以在ModelForm定义中轻松排除该字段: