這是我的一個(gè)父類
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',
# ...還有很多其他屬性
}),
}
現(xiàn)在我想簡化一下代碼,因?yàn)槲业腟ubComment也是繼承自BlogComment,所以對于SubCommentForm這個(gè)子類我只想讓下model = SubComment,對于fields和widgets屬性,我不想增加或者任何內(nèi)容,請問我應(yīng)該怎樣做呢?
3 回答

喵喵時(shí)光機(jī)
TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個(gè)贊
兩種寫法:
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)

米脂
TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超3個(gè)贊
你可以將那2個(gè)屬性忽略不寫,默認(rèn)會自動(dòng)繼承父類的東西,只是模型model哪里改成你要的模型。

翻閱古今
TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超5個(gè)贊
class SubCommentForm(BlogCommentForm):
class Meta(BlogCommentForm.Meta):
# SubComment也是繼承自BlogComment
model = SubComment
不知道這樣行不行
添加回答
舉報(bào)
0/150
提交
取消