2010-07-20 41 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