Django Utils is a collection of small Django helper functions and classes which make common patterns shorter and easier.
Build status:
.. image:: https://github.com/WoLpH/django-utils/actions/workflows/main.yml/badge.svg :alt: django-utils test status :target: https://github.com/WoLpH/django-utils/actions
Coverage:
.. image:: https://coveralls.io/repos/WoLpH/django-utils/badge.svg?branch=master :target: https://coveralls.io/r/WoLpH/django-utils?branch=master
Django Utils is a collection of small Django helper functions, utilities and classes which make common patterns shorter and easier. It is by no means a complete collection but it has served me quite a bit in the past and I will keep extending it.
Examples are:
__str__
, __unicode__
and __repr__
functionsupdated_at
and created_at
fieldsname
property.The library depends on the Python Utils library.
Documentation is available at: http://django-utils-2.readthedocs.io/en/latest/
To install:
pip install django-utils2
or execute python setup.py install
in the source directorydjango_utils
to your INSTALLED_APPS
If you want to run the tests, run py.test
(requirements in tests/requirements.txt
)
All of the standard admin list filters are available through django_utils .admin.filters
as:
SimpleListFilter
)SimpleListFilterDropdown
SimpleListFilterSelect2
On PostgreSQL you can additionally filter on JSON fields as well given paths:
.. code-block:: python
class SomeModelAdmin(admin.ModelAdmin):
list_filter = (
JSONFieldFilterSelect2.create('some_json_field__some__sub_path'),
)
That will filter a JSON field named some_json_field
and look for values
like this:
.. code-block:: json
{"some": {"sub_path": "some value"}}
By default the results for the JSON filters are cached for 10 minutes but can
be changed through the create
parameters.
To enable easy to use choices which are more convenient than the Django 3.0 choices system you can use this:
.. code-block:: python
from django_utils import choices
# For manually specifying the value (automatically detects ``str``, ``int`` and ``float``):
class Human(models.Model):
class Gender(choices.Choices):
MALE = 'm'
FEMALE = 'f'
OTHER = 'o'
gender = models.CharField(max_length=1, choices=Gender)
# To define the values as ``male`` implicitly:
class Human(models.Model):
class Gender(choices.Choices):
MALE = choices.Choice()
FEMALE = choices.Choice()
OTHER = choices.Choice()
gender = models.CharField(max_length=1, choices=Gender)
# Or explicitly define them
class Human(models.Model):
class Gender(choices.Choices):
MALE = choices.Choice('m', 'male')
FEMALE = choices.Choice('f', 'female')
OTHER = choices.Choice('o', 'other')
gender = models.CharField(max_length=1, choices=Gender)
A PostgreSQL ENUM field will be coming soon to automatically facilitate the creation of the enum if needed.