インラインフォームが設定されたフォームがあります。私がやりたいのは、ユーザーがフォームにアクセスしたときに、ユーザー情報(名前など)をフォームのインラインの1つに事前入力することです。リクエストをインラインに渡すことができるようにするため。
これどうやってするの?
Django1.4でdjango-extra-views0.6を使用しています
views.py
私はdefを使用してget_extra_form_kwargs
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を通過するもの(この場合はユーザー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'
私がやろうとしていることは可能ですか?インラインの初期値を設定できますか?