Ich versuche Validierungsfehler zu erhöhen, wo:django - Form Validation funktioniert nicht
1), wenn die in dem start_date
Feld gewählte Datum dem Tag vor dem heutigen Tag ist, dann wird es erhöhen und Fehler. wenn ich eintragen diesen Fehler werfen
‚<‘ nicht zwischen Instanzen von ‚NoneType‘ und ‚datetime.date‘ unterstützt
2), wenn das Enddatum ein Datum vor dem Startdatum ist, es wird einen weiteren Fehler auslösen. Für diesen Teil ist es teilweise Arbeit, wo ich nicht das gesendete Formular speichert, aber es nicht erhöht und Validierungsfehler
Ich weiß, das ist nicht das erste Mal, dass jemand diese Frage stellen, aber ich folgte der Antwort von anderen gegeben und es ist funktioniert nicht, wo mache ich falsch?
Jede Hilfe ist sehr zu schätzen.
Unten ist mein 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 be greater than start date."
self._errors["end_date"] = self.error_class([msg])
raise forms.ValidationError("End date should be greater than 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 be in the past!")
return start_date
view.py: nur
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)
Hi @Jahongir Ich wechsel 'def clean_date (self): 'zu' def clean_start_date (self): 'aber leider funktioniert es immer noch nicht. –