-
django-treeform的Python项目详细描述
fromdjangoimportformsfromdjango_treeformimportTreeForm,SequenceNode,SequenceclassCharacteristicForm(TreeForm):id=forms.IntegerField()name=forms.CharField()rating=forms.CharField()classPersonForm(TreeForm):id=forms.IntegerField()name=forms.CharField()phone=forms.CharField()Charecteristics=SequenceNode(CharacteristicForm)params=[{"id":1,"name":"abc","phone":"12345","Charecteristics":[{"id":1,"name":"Good Looking","rating":"Average",},{"id":2,"name":"Smart","rating":"Excellent",}]},{"id":2,"name":"abc","phone":"12345","Charecteristics":[{"id":1,"name":"Good Looking","rating":"Average",},{"id":2,"name":"Smart","rating":"Excellent",}]}]form=Sequence(PersonForm)(params)print(form.is_valid())# => True
更多嵌套表单
fromdjangoimportformsfromdjango_treeformimportSequenceNode,TreeFormclassItemForm(forms.Form):name=forms.CharField()classNestedForm(TreeForm):classa(TreeForm):classb(TreeForm):classc(TreeForm):classd(TreeForm):classe(TreeForm):items=SequenceNode(ItemForm)params={"a":{"b":{"c":{"d":{"e":{"items":[{"name":"A"},{"name":"B"}]}}}}}}formlike=NestedForm(params)print(formlike.is_valid())# => Trueexpected={'a':{'b':{'c':{'d':{'e':{'items':[{'name':'A'},{'name':'B'}]}}}}}}assertformlike.cleaned_data==expectedassertformlike.errors=={'a':{'b':{'c':{'d':{'e':{'items':[{},{}]}}}}}}
自定义验证
classPointForm(forms.Form):x=forms.IntegerField()y=forms.IntegerField()classPointPairForm(TreeForm):left=Node(PointForm)right=Node(PointForm)defclean(self):ifself.has_error():returnifself.cleaned_data["left"]["x"]<self.cleaned_data["right"]["x"]:raiseforms.ValidationError("oops")params={"left":{"x":10,"y":20},"right":{"x":20,"y":"20"}}formlike=PointPairForm(params)print(formlike.is_valid()# => Falseprint(formlike.errors)# => {"left": {}, "right": {}, "__all__": ["oops"]}