ArrayField’s contribute_to_class() method of course doesn’t call the base
field’s contribute_to_class() but ''does'' set the model attribute. This
works perfectly when using a one dimensional array. It does not work with
nested arrays, however, as the model attribute is only ever set one level
deep. To whit:
{{{
ArrayField(models.CharField()) # Works fine.
ArrayField(ArrayField(models.CharField())) # AttributeError: 'CharField'
object has no attribute 'model'
}}}
This is easily fixed by checking if the base field is an instance of
ArrayField, and if so having it set model on its base field as well (and
do so recursively). I propose the attached patch in order to do so.
--
Ticket URL: <https://code.djangoproject.com/ticket/25954>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* Attachment "arrayfield_set_model_on_nested_arrayfields.diff" added.
Patch: Recursively set base field’s model to support nested ArrayFields.
* status: new => closed
* needs_better_patch: => 0
* resolution: => duplicate
* needs_tests: => 0
* needs_docs: => 0
Comment:
Dupe of #25867.
--
Ticket URL: <https://code.djangoproject.com/ticket/25954#comment:1>