从 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 表单中写入输入类型的值的主要内容,如果未能解决你的问题,请参考以下文章

在 Django 中分离表单输入和模型验证?

jQuery需要从表单输入框的值中设置变量的值

如何从选择表单输入中显示的值发布不同的值

Django:将模板值发布到视图

从表单输入多行时缺少或未对齐的值 - PHP/MYSQLI

将 Javascript 计算传递给 Django 后端