#31774: validate_unique in Model class doesn't validate uniqueness for
ImageField.
-------------------------------------+-------------------------------------
Reporter: Gaurav Ghildyal | Owner: nobody
Type: New feature | Status: closed
Component: Database layer | Version: 3.0
(models, ORM) |
Severity: Normal | Resolution: needsinfo
Keywords: | Triage Stage:
| Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Carlton Gibson):
* resolution: worksforme => needsinfo
Comment:
Hi Gaurav,
Thanks for the follow-up. (I wasn't sure about the attachment: it's seemed
like the whole project was saved as binary in the `manage.py` file — how
did you create that? How would one run it? — Not something I've seen
before, but I was able to look at it.)
I'm going to move this to `needsinfo` — assuming a storage that didn't
create unique names, I can see how this might come up.
The storage issue is a bit of a distraction. The correct validation should
be at the form layer:
* Calling `form.is_valid()`, on a `ModelForm` using the image (or file
field).
* In
[https://github.com/django/django/blob/156a2138db20abc89933121e4ff2ee2ce56a173a/django/forms/models.py#L383
`_post_clean()`] we WOULD validate the uniqueness of the field.
* In a test case
[https://github.com/django/django/blob/156a2138db20abc89933121e4ff2ee2ce56a173a/django/forms/models.py#L310
`_get_validation_exclusions()`] **included** the `logo` field — that's
because of the `blank=True` on the model definition. That means
`_post_clean()` will be skipped for it.
Removing the `blank=True` allows `logo` not be excluded but I didn't have
enough time to verify whether the image/file field would then trigger the
expected error in `validate_unique()`. I may be able to get back to it
(it's interesting) but if you could dig down deeper that would help.
* I'd subclass `Storage` and override `.get_alternative_name()` to not do
that properly.
* Then create a `ModelForm` with just the `logo` field to verify that
`_post_clean()` triggers the uniqueness error.
If not then we can see why not, and whether it can be adjusted.
--
Ticket URL: <https://code.djangoproject.com/ticket/31774#comment:3>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/067.d3aeba8a0bf570f9a1c926696a79429f%40djangoproject.com.