django-specifications¶
This module offers an easy way to attach auxiliary information to Django models. It allows configuring custom forms through the administration interface.
Usage¶
Add
"specifications"
toINSTALLED_APPS
.Create a
specification = ForeignKey("specifications.Specification")
on the model you want to use specifications with. The foreign key can be nullable or required, as you wish.Create the place where the specification field data is actually stored:
from specifications.models import SpecificationValueFieldBase class MyObjectField(SpecificationValueFieldBase): parent = models.ForeignKey( MyObject, on_delete=models.CASCADE, related_name="fields", ) class Meta: ordering = ["field__group__ordering", "ordering"]
Inherit from
FormWithSpecification
when creating yourModelForm
:from specifications.forms import FormWithSpecification class MyObjectForm(FormWithSpecification): class Meta: model = MyObject
If you want to edit models with specifications you might want to use the following snippet:
from specifications.admin import ModelAdminWithSpecification class MyObjectAdmin(ModelAdminWithSpecification): def get_fieldsets(self, request, obj=None): # Define your fieldsets fieldsets = [...] if self.can_add_specification_fields(request, obj): # Extend your fieldset with specification fields fieldsets.extend(...) return fieldsets
The fields are available after saving a specification. The specification can be changed, but you risk losing data if you do this.
Change log¶
Next version¶
- Dropped compatibility with Python 2.
0.4 (2019-09-13)¶
- Added a helper for adding specification field group fieldsets.
- Fixed a bug because the code wouldn’t handle the case where several specification fields were gone at once.
- Dropped compatibility guarantees with old versions of Django.
0.3 (2018-09-30)¶
- Reformatted the code using black.
- Added
fields = '__all__'
to the modelform as required by Django. - Replaced the migrations generated by South.
- Added support for Django 1.8 LTS, 1.11 LTS and 2.1 while dropping support for some older versions. Added support for Python 3.
- Added a testsuite, Travis CI integration and documentation on readthedocs.io.
- Added a
ModelAdminWithSpecification
class which is especially useful if you want to group specification fields into their own fieldsets.