Django admin list filter with goodies
Project description
Django Admin List Filter
Dead simple autocompletion for Django admin list_filter
. This was made using
the libraries shipped with Django (select2
, jquery
), Django’s built-in
list filters, and Django’s built-in AutocompleteJsonView
.
This package is an improved version of the previously created django-admin-autocomplete-list-filter package. It supports Django version 5 and above. Please note that the django-admin-autocomplete-list-filter package is now deprecated. Since I am no longer part of the organization where it was initially developed, I cannot archive it.
No extra package or install required!
Before Django Admin List Filter
After Django Admin List Filter
Installation
pip install django-admin-list-filter
Add dalf
to your INSTALLED_APPS
in your settings.py
:
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"dalf", # <- add
]
Usage
Use DALFModelAdmin
, inherited from admin.ModelAdmin
to inject media urls only.
You have some filters;
DALFRelatedField
: inherited fromadmin.RelatedFieldListFilter
.DALFRelatedFieldAjax
: inherited fromadmin.RelatedFieldListFilter
DALFRelatedOnlyField
: inherited fromadmin.RelatedOnlyFieldListFilter
.DALFChoicesField
: inherited fromadmin.ChoicesFieldListFilter
.
Example models.py
# models.py
import uuid
from django.conf import settings
from django.db import models
class Category(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
title = models.CharField(max_length=255)
def __str__(self):
return self.title
class Tag(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=255)
def __str__(self):
return self.name
class Post(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
category = models.ForeignKey(to='Category', on_delete=models.CASCADE, related_name='posts')
author = models.ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='posts')
title = models.CharField(max_length=255)
body = models.TextField()
tags = models.ManyToManyField(to='Tag', blank=True)
def __str__(self):
return self.title
Example admin.py
:
# admin.py
from dalf.admin import DALFModelAdmin, DALFRelatedOnlyField, DALFRelatedFieldAjax
from django.contrib import admin
@admin.register(Post)
class PostAdmin(DALFModelAdmin):
list_filter = (
('author', DALFRelatedOnlyField), # if author has a post!
('category', DALFRelatedFieldAjax), # enable ajax completion for category field (FK)
('tags', DALFRelatedFieldAjax), # enable ajax completion for tags field (M2M)
)
That’s all... There is also DALFChoicesField
, you can test it out:
# admin.py
from dalf.admin import DALFModelAdmin, DALFChoicesField, DALFRelatedOnlyField, DALFRelatedFieldAjax
from django.contrib import admin
@admin.register(Post)
class PostAdmin(DALFModelAdmin):
list_filter = (
('author', DALFChoicesField), # enable autocomplete w/o ajax (FK)
('category', DALFRelatedFieldAjax), # enable ajax completion for category field (FK)
('tags', DALFRelatedOnlyField), # enable ajax completion for tags field (M2M) if posts has any tag!
)
Extras
I mostly use django-timezone-field
, here is an illustration of timezone
completion w/o ajax:
pip install django-timezone-field
Now add timezone
field to Post
model:
# modify models.py, add new ones
from timezone_field import TimeZoneField # <- add this line
class Post(models.Model):
# all the other fiels
timezone = TimeZoneField(default=settings.TIME_ZONE) # <- add this line
# rest of the code
Now, just add timezone
as regular list_filter
:
# modify admin.py, add new ones
@admin.register(Post)
class PostAdmin(DALFModelAdmin):
# previous codes
list_filter = (
# previous filters
('timezone', DALFChoicesField), # <- add this line
)
That’s it!
Contributor(s)
- Uğur Özyılmazel - Creator, maintainer
Contribute
All PR’s are welcome!
fork
(https://github.com/vigo/django-admin-list-filter/fork)- Create your
branch
(git checkout -b my-feature
) commit
yours (git commit -am 'add some functionality'
)push
yourbranch
(git push origin my-feature
)- Than create a new Pull Request!
I am not very proficient in JavaScript. Therefore, any support, suggestions, and feedback are welcome to help improve the project. Feel free to open pull requests!
Development
Clone the repo somewhere, and install with:
pip install -e /path/to/django-admin-list-filter
And play with the filters :)
Publish
Note to my self:
pip install build twine
rake -T
rake build # Build package
rake bump[revision] # Bump version: major,minor,patch
rake clean # Remove/Delete build..
rake upload:main # Upload package to main distro (release)
rake upload:test # Upload package to test distro
Change Log
2024-05-20
- Initial release.
You can read the whole story here.
License
This project is licensed under MIT
This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the code of conduct.
Project details
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
File details
Details for the file dalf-0.1.0.tar.gz
.
File metadata
- Download URL: dalf-0.1.0.tar.gz
- Upload date:
- Size: 5.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ee1ea3f8b2a7a1be596fdfc1f8a05075946e6a92ab7f832b8dd349ae9e595ba5 |
|
MD5 | 6518cd1b73292dfb0d7244cde70f1c67 |
|
BLAKE2b-256 | 5d267cd0c82d1e041d8a937c8d285b1d3b5d24e7c94bae44070b9754c8512b73 |
File details
Details for the file dalf-0.1.0-py3-none-any.whl
.
File metadata
- Download URL: dalf-0.1.0-py3-none-any.whl
- Upload date:
- Size: 5.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 837d2e4d1a87e744c46d109464bcef141d7bcbd770d26542ea8d2e46ef8a6b00 |
|
MD5 | 4a11ab660d84453646596a7749c0b346 |
|
BLAKE2b-256 | 98326f101c7095bf8afd43049ac7dfe15c67d9a133f6ccbdf6592e352c1e54aa |