Opened 11 years ago

Last modified 11 years ago

#20023 new Bug

Admin Inline form validation must go in Model.clean() if AdminInline.form is not specified

Reported by: chris.freeman.pdx@… Owned by: nobody
Component: Documentation Version: 1.5
Severity: Normal Keywords: admin inline form validation
Cc: Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

The Django admin site page (./en/1.5/ref/contrib/admin) should mention something specific about inline form validation regarding where to put clean() code.

It seems that the only way I was able to clean a field changed as part of an admin inline form was in the Model.clean() method. I could not find a place where using clean_myfield() method worked as all for admin inline forms. Note the inline was not part of a formset, as it had a OneToOneField relationship to the main form.

This is not obvious in the documentation as the Model page mentions clean() and clean_field() but nothing about inlines. The documentation on Inlines mentions validation, but nothing on putting the code in the Model.clean(). Perhaps, also a warning that clean_field() is not run for admin inline form updates.

Please correct me if I'm mistaken about validation of inline forms within the Admin interface.

Regards, Chris

Change History (3)

comment:1 by chris.freeman.pdx@…, 11 years ago

I had a similar question open on StackOverflow (http://stackoverflow.com/questions/15330490/django-clean-field-is-not-being-called-for-updates-on-admin-inline-form). It was answered by pointing to (https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.InlineModelAdmin.form), which implies the answer: Since no form is specified, a model will be used. However, if I specify the form, but not the model, I get a 'model' is required attribute of 'ModelAdmin.inlines[0]'.
Also, if form defaults to ModelForm, then it is not obvious that ModelForm.clean_myfield() will not be called and only Model.clean() will be called.

It would be much clearer if there were an Admin Inline example where both AdminInline.model and AdminInline.form were defined for the same class.

The best solution would be to have a detailed example for the Admin validation precedence (including Inlines) similar to what is described for the model validation.

comment:2 by chris.freeman.pdx@…, 11 years ago

Summary: Admin Inline form validation must go in Model.clean()Admin Inline form validation must go in Model.clean() if AdminInline.form is not specified

comment:3 by Jacob, 11 years ago

Triage Stage: UnreviewedAccepted
Type: UncategorizedBug
Note: See TracTickets for help on using tickets.
Back to Top