Let model extensions define new fields
This MR extends the ExtensibleModel
to accept fields in addition to properties and methods. It leverages django-jsonstore
in order to aggregate those fields in one extended_data
JSONField
, so as to not need migrations when apps add additional fields. Apps should use this feature sparsely, and for more complex additions, add their own model with a ForeignKey
instead.
The following example put in model_extensions.py
of an app adds a field for the t-shirt size of a person:
from jsonstore import CharField
from .models import Person
Person.field(shirt_size=CharField(verbose_name="T-Shirt size", default="7XL"))
The fields are transparent to all known parts of Django. They are accessed like any other field, and even automagically show up in forms or a ModelAdmin
:
Filtering on JSONField
is fully supported.
Advances #141 (closed).
Edited by Nik | Klampfradler