2014-06-11 34 views
1

我在下面看到了以下視圖。我想使用get_context_data method中的'email'在我的UserAuthenticationForm表單中預填充一個表單字段,這怎麼可能?Django如何使用參數表單上下文預填充表單域

查看:

class CampaignLoginView(LoginView): 
    model = Campaign 
    form_class = UserAuthenticationForm 


    def get_context_data(self, *args, **kwargs): 
     context = super(CampaignLoginView, self).get_context_data(*args, **kwargs) 
     user = AppUser.objects.get(pk=1) 
     context['email'] = user.email 

形式:

class UserAuthenticationForm(AuthenticationForm): 

    def __init__(self, *args, **kwargs): 
     super(UserAuthenticationForm, self).__init__(*args, **kwargs) 

還是有辦法'我應該做它?

回答

2

你想要做的是將initial數據傳遞給表單。假設LoginView是基於類的觀點,即包括FormMixin,這是最好的方法get_form_kwargs做:

def get_form_kwargs(self): 
    kwargs = super(CampaignLoginView, self).get_form_kwargs() 
    kwargs['initial']['email'] = self.request.user.email 
    return kwargs 
+0

嗨丹尼爾感謝您的答覆。我明白了,所以這是我的CBV中可用的函數,它允許我以init方法的形式訪問電子郵件字符串?也就是說,我可以做self.kwargs ['user_email']來獲得這個表單嗎? – GrantU

+0

好吧,以便實際工作,只是測試感謝丹尼爾。所以我認爲它在CBV的某個地方將它傳遞給表單對象,因爲我不知道它是如何工作的。 – GrantU

+0

當然,你可以從[code](https://github.com/django/django/blob/master/django/views/generic/edit.py#L10)看到:'get_form'傳遞'get_form_kwargs '給表單類來實例化它。 –