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
--
Ticket URL: <https://code.djangoproject.com/ticket/20023>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* needs_better_patch: => 0
* needs_tests: => 0
* needs_docs: => 0
Comment:
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.
--
Ticket URL: <https://code.djangoproject.com/ticket/20023#comment:1>
--
Ticket URL: <https://code.djangoproject.com/ticket/20023#comment:2>
* type: Uncategorized => Bug
* stage: Unreviewed => Accepted
--
Ticket URL: <https://code.djangoproject.com/ticket/20023#comment:3>