2011-07-24 62 views
0

我有這個類,我需要繼承。刪除超類變量

class AuthenticationForm(forms.Form): 
    username = forms.CharField(label=_("Username"), max_length=30) 
    password = forms.CharField(label=_("Password"), widget=forms.PasswordInput) 

    def __init__(self, request=None, *args, **kwargs): 
     super(AuthenticationForm, self).__init__(*args, **kwargs) 

庫侖你告訴我,我怎麼能繼承這一點,並從超類中刪除username變量?

class LoginForm(AuthenticationForm): 
    email = forms.EmailField(
     required=True, label=_("Email") 
    ) 

    def __init__(self, request, *args, **kwargs): 
     #del super(LoginForm, self).username 
     super(LoginForm, self).__init__(
      request, *args, **kwargs 
     ) 

感謝

+0

你意識到這(做天真,至少)會使得實例'ofAuthenticationForm '失去'用戶名'部分?也許它應該是相反的方向,否則你應該考慮共同的部分。即使這是可能的,它會相當混亂。 – delnan

回答

3

由於這是Django的,你可以從fields字典中刪除:

class LoginForm(…): 
    def __init__(…): 
     super(LoginForm, self).__init__(…) 
     self.fields.pop('username') 
+1

+ 1到這個解決方案。我還補充說這可能是唯一的好方法,因爲你實際上不能從''LoginForm''中移除''username',因爲它不在''LoginForm''中 - 靜態字段不會被繼承,因此你只能從基類中移除它。從基類中刪除它很麻煩且容易出錯,因爲其他子類可能會受此影響。 – Timur

+0

糟糕...對不起,我的意思是將以前的評論的其餘部分添加到問題中,而不是與此答案相關聯。 – Timur