在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
相关产品推荐
相关产品推荐

