将参数传递给Django表单

时间:2018-01-11 14:47:14

标签: python django django-forms

有关此主题的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'值用作模板中某个字段的值。

2 个答案:

答案 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'})

A link to Django documentation on this topic.