有关此主题的stackoverflow有几个问题,但没有一个问题解释发生的事情都没有提供可行的解决方案。
在使用此表单呈现模板时,我需要将用户的名字作为参数传递给Django ModelForm。
我有一些基本形式:
class MyForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.first_name = ???
super(MyForm, self).__init__(*args, **kwargs)
class Meta:
model = MyModel
fields = [***other fields***, 'first_name']
这是我的基于类的视图示例:
class SomeClassBasedView(View):
def get(self, request):
user_first_name = request.user.first_name
form = MyForm(user_first_name)
return render(request, 'my_template.html', {'form': form})
初始化时我应该传递给MyForm
什么?如何在__init__
方法中访问此值?
我希望通过更新self.fields[***].widget.attrs.update({'value': self.first_name})
将'first_name'值用作模板中某个字段的值。
答案 0 :(得分:1)
您可以将参数实例传递给表单,如下所示:
obj = MyModel(...)
form = MyForm(instance=obj)
如果obj
有用户名,则会将其附加到您的表单。
答案 1 :(得分:0)
该解决方案非常简单,只需将初始数据字典传递给MyForm
即可,您需要为这些字段设置一些值。
如果提供此参数,则应为将字段名称映射到初始值的字典。因此,如果MyModel
类具有字段my_field
,并且您想为其设置foo_bar
的初始值,则应使用初始参数创建MyForm对象:
form = MyForm(initial={'my_field': 'foo_bar'})