【问题标题】:Write value on Input type from Django Form从 Django 表单中写入输入类型的值
【发布时间】: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})

【问题讨论】:

    标签: python html django forms input


    【解决方案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 类中工作,改为创建自己的验证,以检索数据或引入和使用序列化器,但也许这种解决方案足以解决您的特定问题。

    【讨论】:

    • 非常好。所以你可能想把它选为正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 2015-10-10
    • 2018-02-18
    • 2023-01-19
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    相关资源
    最近更新 更多