Dav*_*dMM 3 python django validation
我有一个模型的 CreateView,其中包含另一个模型的 inlineformset_factory(4 行,每个子模型之一)。孩子的模型之一是“百分比”。现在它保存了父模型和子模型,但我没有对百分比字段进行任何验证,因此用户可以轻松输入“11”、“34”、“02”和“0”,它将保存它。
我想验证一下,在保存任何内容之前,百分比字段的总和是 100%。我的 forms.py 看起来像这样:
class ParentForm(ModelForm):
class Meta:
model = Parent
fields = ['name', 'observations']
class ChildCreateForm(ModelForm):
class Meta:
model = Child
fields = ['percentage', 'material']
def clean(self):
cleaned_data = super(ChildCreateForm, self).clean()
print(cleaned_data['percentage'])
ChildCreateFormCreateFormSet = inlineformset_factory(Parent, Child, form=ChildCreateForm, extra=4)
Run Code Online (Sandbox Code Playgroud)
到目前为止一切顺利,我可以单独验证每个百分比行,但我想验证总和。
我应该使用 Javascript 验证表单吗?Django有办法吗?还是最好的第三种选择?
您可以子类化BaseInlineFormSet并覆盖该clean方法。使用干净方法的实例。
from django.forms import BaseInlineFormSet
class BaseChildFormSet(BaseInlineFormSet):
def clean(self):
super().clean()
total_percentage = sum(f.cleaned_data['percentage'] for f in self.forms)
if total_percentage != 100:
raise forms.ValidationError("Total percentage must be 100")
Run Code Online (Sandbox Code Playgroud)
然后在创建表单集类时使用您的类。
ChildCreateFormCreateFormSet = inlineformset_factory(Parent, Child, form=ChildCreateForm, formset= BaseChildFormSet, extra=4)
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅文档。
| 归档时间: |
|
| 查看次数: |
488 次 |
| 最近记录: |