Opened 10 years ago
Closed 10 years ago
#26200 closed Bug (duplicate)
Integrity constraint violations when ForeignKey field is not included on the ModelForm
| Reported by: | Gary Reynolds | Owned by: | nobody |
|---|---|---|---|
| Component: | Forms | Version: | 1.8 |
| Severity: | Normal | Keywords: | |
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
Using the Author and Book example from the model_forms tests, Book has a unique_together constraint on ('title', 'author').
If we have a ModelForm which only includes the 'title' field, and use that to update an instance in such a way that it would cause a violation of this constraint, the existing behaviour is to validate the form and allow an update.
Unfortunately this results in an IntegrityError.
There is a work around - it's possible to manually catch this in your own clean methods on the model or form.
Change History (3)
comment:1 by , 10 years ago
comment:2 by , 10 years ago
Yes, I think we need some solution as described in #13091. I believe your proposed patch breaks the case where a developer adds a value for a field in the unique_together to the model after form validation. In that case we'll now get a validation error with no chance to correct it.
I think we can mark this ticket as a duplicate of that one, but let me know if you feel otherwise.
comment:3 by , 10 years ago
| Resolution: | → duplicate |
|---|---|
| Status: | new → closed |
On further searching of the developers mailing list, this might be a partial of #13091?
I hadn't experienced the behaviour on non-FK fields, but it would not be too difficult remove the
if isinstance(self.instance._meta.get_field(field_name), models.ForeignKey)check.Unfortunately makes
model_forms.tests.ModelFormBaseTest.test_exclude_and_validationfail, and the comment in that test notes "This is for backwards compatibility." which is worrying since #13091 is 6 years old!