2010-07-20 40 views
2

在Django中,我試圖從ModelForm表單中派生(子類)一個新表單,我希望刪除一些字段(或者只有一些字段更加正確)。當然,顯而易見的方法是做(基本形式爲django.contrib.auth.forms):如何在Form的子類中排除ModelForm中的聲明字段?

class MyUserChangeForm(UserChangeForm): 
    class Meta(UserChangeForm.Meta): 
    fields = ('first_name', 'last_name', 'email') 

但因爲它增加了/也保持在產生的形式username場這不起作用。該字段在UserChangeForm中明確聲明。即使加入usernameexclude屬性也沒有幫助。

是否有一些正確的方法來排除它,我錯過了什麼?這是一個錯誤?有一些解決方法嗎?

回答

3

嘗試這種情況:

class MyUserChangeForm(UserChangeForm): 

    def __init__(self, *args, **kwargs): 
    super(MyUserChangeForm, self).__init__(*args, **kwargs) 
    self.fields.pop('username') 

    class Meta(UserChangeForm.Meta): 
    fields = ('first_name', 'last_name', 'email') 

這動態地從表格中刪除一個字段被創建時。

1

看來(通用)的解決方法(仍然失蹤考慮exclude打入賬戶)是:

def __init__(self, *args, **kwargs): 
    super(UserChangeForm, self).__init__(*args, **kwargs) 
    for field in list(self.fields): 
    if field not in self._meta.fields: 
     del self.fields[field] 

但是這聞起來像我的錯誤。

+0

我打開了[Django的bug](http://code.djangoproject.com/ticket/13971)。 – Mitar 2010-07-21 03:34:18