Django Utils is a module with some convenient utilities not included with the standard Django install
Project description
Travis status:
Coverage:
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:
Admin Select (Dropdown) filters
Admin Select2 (Autocomplete dropdown) filters
Admin JSON sub-field filters
Enum based choicefields
Models with automatic __str__, __unicode__ and __repr__ functions based on names and/or slugs using simple mixins.
Models with automatic updated_at and created_at fields
Models with automatic slugs based on the name property.
Iterating through querysets in predefined chunks to prevent out of memory errors
The library depends on the Python Utils library.
Documentation is available at: http://django-utils-2.readthedocs.io/en/latest/
Install
To install:
Run pip install django-utils2 or execute python setup.py install in the source directory
Add django_utils to your INSTALLED_APPS
If you want to run the tests, run py.test (requirements in tests/requirements.txt)
Admin Select / Dropdown / Autocomplete (JSON) Filters
All of the standard admin list filters are available through django_utils .admin.filters as:
The original filter (e.g. SimpleListFilter)
A basic select/dropdown filter: SimpleListFilterDropdown
A select2 based autocompleting dropdown filter: SimpleListFilterSelect2
On PostgreSQL you can additionally filter on JSON fields as well given paths:
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:
{"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.
Choices usage
To enable easy to use choices which are more convenient than the Django 3.0 choices system you can use this:
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.
Links
- Documentation
- Bug reports
- Package homepage
- My blog
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for django_utils2-3.0.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ac9b32a9d1611365049c1c7865d1c266b111281c4b9ff2917458740b6f65d73e |
|
MD5 | 21fb152cbb0fda6f594b0ec8a2e6b259 |
|
BLAKE2b-256 | 25a3f99012ea8e7215a13a6ec83d4feadcfc119edf77edd2e83193ae004ca34a |