Skip to main content
 首页 » 编程设计

python之Django之模型继承

2025年05月04日23lhb25

在 Django 网站上给出了这个示例代码:

>>> class RestrictedArticleForm(EnhancedArticleForm): 
...     class Meta(ArticleForm.Meta): 
...         exclude = ('body',) 

我对此的理解是,有一个名为 EnhancedArticleForm(或 ArticleForm 和 EnhancedArticleForm)的模型,它应该在呈现时从表单中排除 body 字段。我的代码如下所示:

class EditUserForm(UserForm): 
    class Meta(UserForm.Meta): 
        exclude = ('username',) 

我不希望用户能够明显地更改他们的用户名。但是有了这段代码,它所做的就是使用户名字段成为最后显示的字段。它实际上并不排除它。我是否遗漏了一些明显的东西?

编辑:

显然这是因为 django 中的一个错误。我正在尝试像这样覆盖 init 但表单没有显示。我认为这是因为我可能做错了:

class EditUserForm(UserForm): 
    def __init__(self,instance): 
        UserForm.__init__(self,instance) 
        del self.fields['username'] 

请您参考如下方法:

这实际上是 Django 中的一个错误:

http://code.djangoproject.com/ticket/8620 (请根据您的情况进一步查看工单中的评论)

不幸的是,它看起来已经一年多没有看到任何 Action 了。

解决此问题的一种方法是覆盖表单 __init__ 方法并简单地从 self.fields 中删除该字段。