#30217 closed New feature (needsinfo)
Admin form for DateTimeField does should require both fields
| Reported by: | wKavey | Owned by: | nobody |
|---|---|---|---|
| Component: | contrib.admin | Version: | 2.1 |
| Severity: | Normal | Keywords: | admin field validation |
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | yes |
Description
The default Admin form for a DateTimeField seems to be a split form, with separate inputs for both the Date and Time segments. If one provides a Date, but no Time, the form produces a value of 'None' and raises no ValidationErrors.
I would expect at least a ValidationError indicating that one must provide both a Date and a Time. There is already one thrown if no values at all are provided.
I would imaging this could involve setting "require_all_fields=True" on the SplitDateTimeField, however I am not sure.
Somewhat related to https://code.djangoproject.com/ticket/9721
I hit this because I have a custom validation applied in my model's clean() method (datetime_1 <= datetime_2). This is also called in my model's save() method (self.full_clean()). When, using the admin interface, I only specify a Date and no Time, I get an error because one, or both, of my datetimes are None.
Change History (3)
comment:1 by , 7 years ago
| Resolution: | → needsinfo |
|---|---|
| Status: | new → closed |
comment:2 by , 7 years ago
Hmm you're right. I think my issues are stemming from the fact that I force a call to self.full_clean() within my model's save() method
class BasicModel(models.Model):
dt = models.DateTimeField()
def clean(self, *args, **kwargs):
super().clean(*args, **kwargs)
if self.dt is None:
raise ValidationError("Cannot be None")
def save(self, *args, **kwargs):
self.full_clean()
return super().save(*args, **kwargs)
I'm unsure of why it would be calling save() before it had completed validation of the form fields... any idea how I could work around this? There are some pretty stringent checks I am attempting to implement before any instance of this model is saved
Hi wKavey,
I just tried to reproduce the issue you described an I can't. If a try to set the
User.date_joinedvia the admin and omit the time, I getThis field is required.. I tested this on the latest master.Maybe share a bit more information about the steps you took and you what you believe the error was.
Best
-Joe