python中怎么override父类的class Meta?
高洛峰
高洛峰 2016-11-16 14:03:50
0
2
1010

这是我的一个父类

class BlogCommentForm(forms.ModelForm):

    class Meta:
        model = BlogComment
        fields = ['user_name', 'body']

        widgets = {
            'user_name': forms.TextInput(attrs={
                'required': 'required',
                # ...还有很多其他属性
            }),
            'body': forms.Textarea(attrs={
                'required': 'required',
                # ...还有很多其他属性
            }),
        }

这是我的子类

class SubCommentForm(BlogCommentForm):

    class Meta:
        # SubComment也是继承自BlogComment
        model = SubComment

        fields = ['user_name', 'body']
        widgets = {
            'user_name': forms.TextInput(attrs={
                'required': 'required',
                # ...还有很多其他属性
            }),
            'body': forms.Textarea(attrs={
                'required': 'required',
                # ...还有很多其他属性
            }),
        }

现在我想简化一下代码,因为我的SubComment也是继承自BlogComment,所以对于SubCommentForm这个子类我只想让下model = SubComment,对于fields和widgets属性,我不想增加或者任何内容,请问我应该怎样做呢?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全員に返信(2)
学霸

你可以将那2个属性忽略不写,默认会自动继承父类的东西,只是模型model哪里改成你要的模型。

いいねを押す +0
三叔

两种写法:

import copy


class A:
    class Meta:
        model = 'hello'
        fields = ['a', 'b']
        widgets = {'a': 'b'}


class B(A):
    """第一种"""
    dic = copy.deepcopy({
        k: v
        for (k, v) in A.Meta.__dict__.items()
        if not k.startswith('__')
    })
    dic['model'] = 'b'
    Meta = type('Meta', (object,), dic)


class C(A):
    """第二种"""
    class Meta:
        model = 'c'
        widgets = copy.deepcopy(A.Meta.widgets)
        fields = copy.deepcopy(A.Meta.fields)


いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!