Django - 模型表单继承
在Django的网站上,有这样一段示例代码:
>>> class RestrictedArticleForm(EnhancedArticleForm):
... class Meta(ArticleForm.Meta):
... exclude = ('body',)
我理解的是,这里有一个叫做EnhancedArticleForm(或者ArticleForm和EnhancedArticleForm)的模型表单,应该在渲染时把正文字段排除在外。我的代码看起来是这样的:
class EditUserForm(UserForm):
class Meta(UserForm.Meta):
exclude = ('username',)
我显然不想让用户能够更改他们的用户名。但是用这段代码后,所有做的只是把用户名字段放到了最后一个显示的位置。它并没有真正把这个字段排除掉。我是不是漏掉了什么明显的东西?
编辑:
显然这是因为Django中的一个bug。我试着像这样重写init,但是表单没有显示出来。我觉得可能是我这样做错了:
class EditUserForm(UserForm):
def __init__(self,instance):
UserForm.__init__(self,instance)
del self.fields['username']
1 个回答
1
这其实是Django中的一个错误:
http://code.djangoproject.com/ticket/8620 (在这个链接的评论中可以找到适合你情况的内容)
不幸的是,看起来这个问题已经超过一年没有人处理了。
解决这个问题的一种方法是重写表单的 __init__
方法,然后简单地把那个字段从 self.fields 中移除。