python - django - Form ValidationError not working -
i'm trying raise validation error :
1) if date selected in start_date field day before today raise , error. when submit throw error
'<' not supported between instances of 'nonetype' , 'datetime.date'
2) if end date date before start date, raise error. part partially work doesn't save submitted form doesn't raise , validation error
i know not first time ask question followed answer given others , it's not working, wrong?
any appreciate.
below code :
model.py:
class leave(models.model): employee = models.foreignkey(employee, on_delete=models.cascade, related_name='+') start_date = models.datefield() end_date = models.datefield() duration = models.floatfield() form.py :
class leavesdetailform(forms.modelform): class meta: model = leave fields = ('employee', 'type', 'status', 'start_date', 'end_date', 'duration', 'comment') widgets = {'start_date': forms.dateinput(attrs={'type': 'date'}), 'end_date': forms.dateinput(attrs={'type': 'date'}), 'employee': forms.hiddeninput(), 'duration': forms.hiddeninput(), 'status': forms.hiddeninput()} def clean(self): start_date = self.cleaned_data.get("start_date") end_date = self.cleaned_data.get("end_date") if end_date < start_date: msg = u"end date should greater start date." self._errors["end_date"] = self.error_class([msg]) raise forms.validationerror("end date should greater start date.!") def clean_start_date(self): start_date = self.cleaned_data.get('start_date') if self.instance.start_date < datetime.date.today(): raise forms.validationerror("the date cannot in past!") return start_date view.py :
def my_leaves_view(request): form = leavesdetailform(request.post or none) leaves_log = leave.objects.all().filter(employee=request.user.profile.employee.id) if form.is_valid(): inst = form.save(commit=false) inst.start_date = form.cleaned_data['start_date'] inst.end_date = form.cleaned_data['end_date'] duration = (inst.end_date - inst.start_date).days inst.duration = duration inst.save() return httpresponseredirect('my_leaves_content.html') context = {'form': form} return render(request, 'hrm/my_leaves/my_leaves_content.html', context)
looks named function wrong. change clean_date clean_start_date should in format clean_function_name.
hope helps!
Comments
Post a Comment