EnquiryForm是一個有很多欄位的模型表單,我無法使用繼承來繼承父表單的欄位。
class EnquiryForm(models.ModelForm)。
...
possession = forms.ChoiceField(
required=True,
choices=(('', '----Select----'),)
models.Inquiry._meta.get_field('possession').options,
widget=forms.Select(attrs={'class': 'form-control btn btn-primary'})
)
...
# 它有其他幾個欄位和干凈的方法來操作用戶輸入和表單驗證。
class EditForm(EnquiryForm)。
possession_month = forms.ChoiceField(
label='Possession Month'。
required=True,
choices=MONTHS.choice,
widget=forms.Select(attrs={'class': 'form-control btn btn-primary', 'required':True})
)
possession_year = forms.ChoiceField(
choices=possession_year_choices(
datetime.now().year 10, datetime.now().year)。)
label='Possession Year'。
required=True。
widget=forms.Select(attrs={'class': 'form-control btn btn-primary', 'required':True})
)
class Meta(ChurchasingForm.Meta)。
model = models.Inquiry
fields = EnquiryForm.Meta.field (' possession_month', ' possession_year', )
注意這里(最后一行),我直接訪問了EnquiryForm.Meta.fies。但我試圖通過繼承Meta類的super().fies來訪問它,但沒有成功。
我們能否通過Meta的繼承來繼承fields,例如super(ChurchasingForm.Meta).field.
P.S. - 我還必須在EditForm中從parent Meta.field中洗掉possession欄位。
uj5u.com熱心網友回復:
你可以覆寫你的序列化器的get_fields方法:
class EditForm(EnquiryForm)。
def get_fields(self)。
fields = super().get_fields()
fields['possession_month'] = forms.ChoiceField(label='Possession Month', required=True, choices=MONTHS. choices, widget=forms.Select(attrs={'class': 'form-control btn btn-primary', 'required':True})
fields['possession_year'] = forms.ChoiceField(options=possession_year_choices(datetime.now().year 10, datetime.now()。 year), label='Possession Year', required=True, widget=forms.Select(attrs {'class': 'form-control btn btn-primary', 'required':True})
del fields[' possession']
return欄位
但也可以覆寫序列化器的Meta屬性,效果相當好。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/320096.html
標籤:
上一篇:每個子類中的靜態恒定變數
