从 Django 表单中写入输入类型的值
Posted
技术标签:
【中文标题】从 Django 表单中写入输入类型的值【英文标题】:Write value on Input type from Django Form 【发布时间】:2021-05-09 15:17:12 【问题描述】:我在此页面上阅读了很多问题,但我没有找到有关此问题的信息。我有一个为 django 自动创建的表单。它工作得很好,但是当我找到值时我需要在输入上写值,这可能吗??
我正在尝试这个,如果我打印 misHoras.horas_trabajo
我可以读取好的值,但我不知道如何在输入 html 类型上写入这个值。
谢谢。
def horas(request):
#horas_todas = Horas.published.all()
horas = get_object_or_404(Horas,
autor= '2',
dia='2021-01-26',
)
if request.method=='POST':
misHoras=FormularioHoras(request.POST)
if misHoras.is_valid():
infForm=misHoras.cleaned_data
misHoras.horas_trabajo = horas.horas_trabajo
return render(request, "BieleGastosApp/formulario_horas.html", "form": misHoras)
else:
misHoras = FormularioHoras()
#return render(request, "BieleGastosApp/horas.html", "horas": horas)
return render(request, "BieleGastosApp/horas.html", "form": misHoras)
【问题讨论】:
【参考方案1】:来自 django 文档: https://docs.djangoproject.com/en/3.1/ref/forms/api/#accessing-clean-data
如果您有一个绑定的 Form 实例并想以某种方式更改数据,或者如果您想将未绑定的 Form 实例绑定到某些数据,请创建另一个 Form 实例。无法更改 Form 实例中的数据。一旦创建了一个 Form 实例,你应该认为它的数据是不可变的,不管它是否有数据。
所以你要做的是定义一个新字典,用 misHoras.cleaned_data 更新它,并用该数据初始化一个新表单:
if misHoras.is_valid():
new_form_data =
new_form_data.update(misHoras.cleaned_data)
new_form_data['horas_trabajo'] = horas.horas_trabajo
new_form = FormularioHoras(new_form_data)
if new_form.is_valid():
return render(..., "form": new_form)
理论上,您也可以先复制 POST,然后使用固定数据对其进行更新,或者将 horas.horas_trabajo 作为额外变量添加到模板中,因为它显然不应该被您的逻辑更改,无论如何(当您覆盖该字段上的任何输入时);但是,如果您想将其添加为可更改的字段,则应为其提供初始表单。
为了使其更美观,您可能希望直接在 Form 类中工作,改为创建自己的验证,以检索数据或引入和使用序列化器,但也许这种解决方案足以解决您的特定问题。
【讨论】:
非常好。所以你可能想把它选为正确的。以上是关于从 Django 表单中写入输入类型的值的主要内容,如果未能解决你的问题,请参考以下文章