Opened 13 years ago
Closed 13 years ago
#20180 closed Bug (invalid)
unique_together with DateField (auto_now_add = True) causes error in admin.
| Reported by: | Owned by: | Vinnicyus Gracindo | |
|---|---|---|---|
| Component: | contrib.admin | Version: | 1.5 |
| Severity: | Normal | Keywords: | admin, unique_together, auto_now_add |
| Cc: | bmispelon@… | Triage Stage: | Unreviewed |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | yes |
Description
class Rating(models.Model):
ip = models.IPAddressField()
date = models.DateField(auto_now_add=True)
rating = models.FloatField()
class Meta:
unique_together = (('ip', 'date'))
At saving time:
IntegrityError at /admin/rating/rating/add/
columns ip, date are not unique
Expected output:
Rating with this Ip and Date already exists. (In Interface)
Note:
See TracTickets
for help on using tickets.
Hi,
I don't think this is a bug, but rather an unfortunate side-effect of using
auto_add_now.What happens is that when you use this option, then the corresponding field is not present in the form that the admin auto-generates.
Therefore, all the validation related to that field (including the uniqueness checks) is not triggered at all which in turn raises the
IntegrityErrorthat you see (instead of a nicer form error message).A workaround for this problem is to get rid of
auto_now_addand usedefault=django.utils.timezone.now, which will include the field in the admin form (and populate it with a default value).