You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Django表单中传递与访问值的问题求助

解决Django表单传递Container_id到模板的问题

我来帮你一步步搞定这两个问题:表单原有值为空,以及无法在模板中访问Container_id。

1. 修复表单原有值为空的问题

你当前的get_form_kwargs方法没有调用父类的方法,导致表单初始化时缺少了绑定实例所需的关键参数(比如instance),所以原有字段值没法正常显示。修改views.py里的get_form_kwargs方法:

def get_form_kwargs(self, **kwargs):
    # 先获取父类生成的默认kwargs,包含表单绑定实例的必要参数
    kwargs = super(ObjectUpdateView, self).get_form_kwargs(**kwargs)
    objectid = self.kwargs['object_id']
    # 别用Python内置关键字`object`当变量名,改成obj更稳妥
    obj = Object.objects.get(id=objectid)
    container = obj.container
    kwargs['container_id'] = container.id
    return kwargs

2. 将Container_id传递到模板

你需要把container_id存为表单的实例属性,这样模板才能直接访问它。调整forms.py里的__init__方法:

class ObjectEditForm(forms.ModelForm):
    class Meta:
        model = Object
        fields = ['TestField']
    
    def __init__(self, *args, **kwargs):
        # 先弹出container_id参数,注意键名要和view里传的一致(小写container_id)
        self.container_id = kwargs.pop('container_id', None)
        # 调用父类初始化方法,保证表单正常加载原有数据
        super(ObjectEditForm, self).__init__(*args, **kwargs)

然后在模板form_page.html里,直接通过表单实例的属性访问:

{{ form.container_id }}

为啥之前的方式行不通?

  • 你之前在get_form_kwargs里没继承父类的kwargs,导致表单拿不到绑定的instance对象,所以原有值为空。
  • 模板里{{form.kwarg.Container_id}}的写法是错的,模板没法直接访问表单的kwargs,只能访问表单实例上的属性,所以得把container_id存为表单实例属性才能调用。

内容的提问来源于stack exchange,提问作者Sebastian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:00:43