2

インラインフォームが設​​定されたフォームがあります。私がやりたいのは、ユーザーがフォームにアクセスしたときに、ユーザー情報(名前など)をフォームのインラインの1つに事前入力することです。リクエストをインラインに渡すことができるようにするため。

これどうやってするの?

Django1.4でdjango-extra-views0.6を使用しています

views.py私はdefを使用してget_extra_form_kwargskwargsを次のように設定しています:

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を通過するもの(この場合はユーザーfirst_nameとlast_nameのみ)にバインドできるようにするためです。

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。0.6.1get_extra_form_kwargsで修正する必要があります。

これはうまくいくはずです:

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 に答える