2012-12-10 48 views
2

我有一個帶內聯表單集的表單。 我想要做的是當用戶登陸窗體時,讓他的用戶信息(例如名稱)預先填充到表單的某個內聯中。爲了能夠將請求傳遞給內聯。如何將請求傳遞到使用django-extra-views設置的內聯表單

我該怎麼做?

我的Django的1.4

views.py使用django-extra-views 0.6我使用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' 

正是我試圖做甚至可能嗎?我可以設置內聯的初始值嗎?

+0

我創建了一個問題,這個https://github.com/AndrewIngram/django-extra-views/issues/35。我會盡量快速排序。 –

+0

thnx!這將是偉大的@AndrewIngram我會在同一時間觀看django-extra-views;) – darren

+0

剛剛意識到內聯已經提出了請求。您應該能夠覆蓋內聯的'get_extra_form_kwargs'以將用戶對象傳遞給每個表單實例。 –

回答

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 
相關問題