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