Opened 14 years ago
Closed 14 years ago
#14531 closed (wontfix)
Add validate_unique flag to ModelForm.Meta
Reported by: | Greg Wogan-Browne | Owned by: | Greg Wogan-Browne |
---|---|---|---|
Component: | Forms | Version: | 1.2 |
Severity: | Keywords: | ||
Cc: | Triage Stage: | Unreviewed | |
Has patch: | yes | Needs documentation: | yes |
Needs tests: | yes | Patch needs improvement: | yes |
Easy pickings: | no | UI/UX: | no |
Description
ModelForm
's currently have a wart in that if you override clean()
you have to call super()
to ensure that unique constraints are validated.
This can lead to surprises if you haven't read the documentation closely.
It seems to me this would be better as a property on the Meta
class.
Example:
class DontCheckForm(ModelForm): def clean(self): return self.cleaned_data class Meta: model = SomeModel
Becomes:
class DontCheckForm(ModelForm): class Meta: model = SomeModel validate_unique = False
Attachments (1)
Change History (3)
by , 14 years ago
Attachment: | validate_unique.patch added |
---|
comment:1 by , 14 years ago
Needs documentation: | set |
---|---|
Needs tests: | set |
Patch needs improvement: | set |
comment:2 by , 14 years ago
Resolution: | → wontfix |
---|---|
Status: | new → closed |
I don't see how adding a new option is a fix for "user needs to read the documentation" -- any new option will also require documentation, and that documentation will need to be read and understood.
If you override a method, you need to call super() to get the superclass' behavior. This is entirely consistent Python idiom. The default implementation of clean() validates all the uniqueness conditions for the model. If you implement clean(), and don't call super(), then you don't get that validation. I don't see the value in adding an option flag to implement behavior.
If your argument is that documentation needs to be improved around the implications of calling super(), then I'm happy to entertain suggestions.
Outline of suggested approach