Metadata-Version: 2.0
Name: django-specifications
Version: 0.3.0
Summary: Additional, dynamic fields for all Django models.
Home-page: http://github.com/matthiask/django-specifications/
Author: Matthias Kestenholz
Author-email: mk@feinheit.ch
License: BSD License
Platform: OS Independent
Classifier: Environment :: Web Environment
Classifier: Framework :: Django
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: BSD License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
Classifier: Topic :: Software Development
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
Requires-Dist: Django (>=1.4.2)

=====================
django-specifications
=====================

.. image:: https://travis-ci.org/matthiask/django-specifications.png?branch=master
   :target: https://travis-ci.org/matthiask/django-specifications

Version |release|

This module offers an easy way to attach auxiliary information to Django
models. It allows configuring custom forms through the administration
interface.

Usage
=====

1. Add ``"specifications"`` to ``INSTALLED_APPS``.
2. 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.
3. 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"]

4. Inherit from ``FormWithSpecification`` when creating your ``ModelForm``::

       from specifications.forms import FormWithSpecification

       class MyObjectForm(FormWithSpecification):
           class Meta:
               model = MyObject

5. 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.


