Django Principals
=================
This module provides ``PrincipalField``, a model field for Django_ that allows
instances of a model to be defined as the principal instance for an entire model or
a collection of instances. When the status of one instance is changed, the status
of other items in the collection are updated in response as necessary.
Usage
-----
Add a ``PrincipalField`` to your model; that's it.
If you want to work with all instances of the model as a single collection,
there's nothing else required. To create collections based on one or more
fields on the model, specify the field names using the ``collection`` argument.
In general, the value assigned to a ``PrincipalField`` will be handled like a
unique Boolean value. Setting the principal to ``True`` will
cause all other items to become ``False``within the same collection --
unless, of course, the collection has fewer than two elements.
Multi-table model inheritance
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
By default, if a parent model has a principal field that declares a collection,
child model instances are filtered independently. This behavior can be changed
by specifying a `parent_link` argument identifying the name of the one-to-one
field linking the child model to the parent. If `parent_link` is set, all subclass
instances will be part of a single sequence in each collection.
Limitations
-----------
* Unique constraints can't be applied to ``PrincipalField`` because they break
the ability to update other items in a collection all at once. This one was
a bit painful, because setting the constraint is probably the right thing to
do from a database consistency perspective, but the overhead in additional
queries was too much to bear.
Credits
-------
This code loosely draws on concepts inspired by django-positions_ and django-featured-item_,
two projects which provide custom model fields with different functionality.
.. _`Django`: http://www.djangoproject.com/
.. _`django-positions`: https://github.com/jpwatts/django-positions
.. _`django-featured-item`: https://bitbucket.org/tim_heap/django-featured-item
Metadata
Release files for django-principals 0.1.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| django-principals-0.1.5.tar.gz | 5.4 kB | Without provenance | Details for django-principals-0.1.5.tar.gz |
Release files / django-principals-0.1.5.tar.gz
| Download URL | django-principals-0.1.5.tar.gz |
|---|---|
| Size | 5.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
dd491c80a17adff6f3df18da8a2601d64d4d783f91c247050dd9b3dce00c29ad
|
|
BLAKE2b-256 checksum How to use checksums |
a62dcddde6c6393b2aca258df45ab489acb7630971914fae800965fccc324878
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Security for django-principals 0.1.5
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.