2

我有一个带有内联表单集的表单。我想做的是当用户登陆表单时,将他的用户信息(例如姓名)预填充到表单的内联之一中。为了能够将请求传递给内联。

我怎样才能做到这一点?

我在 Django 1.4 上使用django-extra-views 0.6

views.py我使用get_extra_form_kwargsdef 来设置我的 kwargs 时,如下所示:

class EventMemberInline(InlineFormSet):
    model = EventMember
    extra = 1
    form_class = EventMemberForm

    def get_formset_kwargs(self):
        formset_kwargs = super(EventMemberInline, self).get_formset_kwargs()
        formset_kwargs.update({'first_name':self.request.user.first_name, 'last_name':self.request.user.last_name})
        return formset_kwargs

我这样做是为了能够将我的内联字段(初始值)绑定到我通过 kwargs 传递的内容(在这种情况下只是用户名和姓氏)

forms.py

class EventMemberForm(ModelForm):

    class Meta:
        model = EventMember

    def __init__(self, *args, **kwargs):
        self.fields['first_name'].initial = kwargs['first_name']
        self.fields['last_name'].initial = kwargs['last_name']
        super(EventMemberForm, self).__init__(*args, **kwargs)

但我得到这个错误:

Exception Value:    

__init__() got an unexpected keyword argument 'last_name'

我想要做的甚至可能吗?我可以设置内联的初始值吗?

4

1 回答 1

3

django-extra-views==0.6.0意味着get_extra_form_kwargs没有调用内联的问题,它应该在 0.6.1 中修复。

这应该有效:

class EventMemberInline(InlineFormSet):
    model = EventMember
    extra = 1
    form_class = EventMemberForm

    def get_extra_form_kwargs(self):
        kwargs = super(EventMemberInline, self).get_extra_form_kwargs()
        kwargs.update({
            'first_name': self.request.user.first_name,
            'last_name': self.request.user.last_name
        })
        return kwargs

...

class EventMemberForm(ModelForm):

    class Meta:
        model = EventMember

    def __init__(self, *args, **kwargs):
        initial_first_name = kwargs.pop('first_name')
        initial_last_name = kwargs.pop('last_name')

        super(EventMemberForm, self).__init__(*args, **kwargs)

        self.fields['first_name'].initial = initial_first_name
        self.fields['last_name'].initial = initial_last_name
于 2013-01-30T12:13:42.773 回答