【问题标题】:Django forms.ModelForm, Pylint, and new/old style classesDjango forms.ModelForm、Pylint 和新/旧样式类
【发布时间】:2013-03-06 20:39:54
【问题描述】:

我有一个看起来像这样(简化)的 Django 1.5 表单:

class BidForm(forms.ModelForm):
    class Meta:
        fields = (
        )
        model = Bid

    def __init__(self, *args, **kwargs):
        super(BidForm, self).__init__(*args, **kwargs)
        something()

当我对此运行 Pylint 时,出现以下错误:

E1002:<line,row>:BidForm.__init__: Use of super on an old style class

我认为这意味着 Django 的 forms.ModelForm 是一个老式类,并且根据 python docs 我对 super 的调用没有发生,因此是无关的。这是真的?我可以直接删除超级调用没有效果吗?

【问题讨论】:

    标签: python django pylint


    【解决方案1】:

    没有。皮林特虽然很棒,但远非万无一失,在这种情况下只是弄错了。 ModelForm 是一个新的样式类,需要super。

    【讨论】:

    • 谢谢——我认为 ModelForm 是新式的,并认为我只是缺少了一些东西。我希望 Pylint 有办法提交问题,但我似乎找不到这样做的方法......
    • @Erik 手册页有一个 BUGS 部分,可将您定向到 python-projects@lists.logilab.org
    • Pylint 错误报告现在在 Bitbucket 上维护。我为此打开了一个问题:bitbucket.org/logilab/pylint/issue/24/…
    【解决方案2】:

    此错误/警告与 ModelForm 类无关,与:

        class Meta:
            fields = ()
            model = Bid
    

    你只需要抑制警告:

        class Meta:  # pylint: disable=C1001
            fields = ()
            model = Bid
    

    【讨论】:

    • 或者你可以直接使用新式类,即class Meta(object):,根据this answer
    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 2016-04-22
    • 2012-05-16
    • 2021-01-10
    • 2023-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多