#34166: UniqueConstraint with condition not validated if the condition field is
not
editable.
-------------------------------------+-------------------------------------
Reporter: Márton Salomváry | Owner: nobody
Type: New feature | Status: closed
Component: Database layer | Version: 4.1
(models, ORM) |
Severity: Normal | Resolution: wontfix
Keywords: model validation | Triage Stage:
unique constraint condition | Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Comment (by Márton Salomváry):
Replying to [comment:2 Mariusz Felisiak]:
> Thanks for the ticket. This is
[https://docs.djangoproject.com/en/stable/topics/forms/modelforms
/#interaction-with-model-validation the documented behavior for forms] and
it was [https://github.com/django/django/pull/14625#discussion_r946747147
discussed] shortly in the original PR (as you've already noticed).
>
> Unfortunately, changing this would be backward incompatible so please
first start a discussion on the DevelopersMailingList, where you'll reach
a wider audience and see what other think, and
[https://docs.djangoproject.com/en/stable/internals/contributing/bugs-and-
features/#requesting-features follow the guidelines with regards to
requesting features].
I understand, but I'm not sure I have the courage and time to try to sell
a breaking change :)
Replying to [comment:3 Carlton Gibson]:
> For your project, defining model form subclass for
[https://docs.djangoproject.com/en/4.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.get_form
ModelAdmin.get_form] implementing clean validating the non-editable field
would be the way to go.
I ended up adding this to the model as a simple workaround (and a
handcrafted `violation_error_message` on the `UniqueConstraint`):
{{{
def clean(self):
conditional_constraints = {"thing_unique_name"}
for constraint in self._meta.constraints:
if constraint.name in conditional_constraints:
constraint.validate(self.__class__, self)
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/34166#comment:4>
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/0107018485794ccf-0e560231-94e0-44e2-96e2-d8efe72ceb17-000000%40eu-central-1.amazonses.com.