django - BaseInlineFormSet does not clean invalid characters -
i trying clean inline formset data. have 3 rules: 1) must supply @ least 1 name, 2) if specify name must specify both first , last, , 3) no spaces. when data saves, spaces still saved database. doing wrong?
another issue validation errors not displayed. why that?
forms.py: class usernameform(forms.models.baseinlineformset): def clean(self): super(usernameform, self).clean() count = 0 form in self.forms: try: firstname = form.cleaned_data.get("name_first") middlename = form.cleaned_data.get("name_middle") lastname = form.cleaned_data.get("name_last") if firstname or middlename or lastname: if len(firstname) == 0 or len(lastname) == 0: raise forms.validationerror("first , last name required.") if form.cleaned_data , not form.cleaned_data.get('delete', false): count += 1 form.cleaned_data['name_first'] = firstname.replace(" ",'') form.cleaned_data["name_middle"] = middlename.replace(" ",'') form.cleaned_data["name_last"] = lastname.replace(" ",'') except attributeerror: pass if count < 1: raise forms.validationerror('you must have @ least 1 order') views.py usernameformset = inlineformset_factory(profile, alias, formset=usernameform, extra=2, can_delete=true ) if request.method == 'post': cnameformset = usernameformset(request.post, request.files, instance=cprofile) if cnameformset.is_valid(): testresults = cnameformset.save(commit=false) form in testresults: form.save()
you can apply both form , formset. use formset validate data across forms , form validate data within form , raise validation errors.
usernameformset = inlineformset_factory(profile, alias, form=usernameform, formset=atleastone, extra=2, can_delete=true ) class atleastone(forms.models.baseinlineformset): def clean(self): count = 0 form in self.forms: try: if form.cleaned_data , not form.cleaned_data.get('delete', false): count += 1 except attributeerror: pass if count < 1: raise forms.validationerror('you must have @ least 1 name') class usernameform(forms.modelform): class meta: model = alias def clean(self): cleaned_data = self.cleaned_data # check 1: must have first , last. firstname = cleaned_data.get("name_first") middlename = cleaned_data.get("name_middle") lastname = cleaned_data.get("name_last") if firstname or middlename or lastname: if len(firstname) == 0 or len(lastname) == 0: raise forms.validationerror("first , last name required.") # check 2: no spaces. cleaned_data["name_first"] = firstname.replace(" ",'') cleaned_data["name_middle"] = middlename.replace(" ",'') cleaned_data["name_last"] = lastname.replace(" ",'') return cleaned_data
Comments
Post a Comment