Django admin: 1) Get more context for filtering in get_search_results, 2) use select2 (autocomplete_fields) everywhere (because implicit is better than explicit).
Documentation
The full documentation is at https://django-admin-autocomplete-all.readthedocs.io.
Quickstart
Install django-admin-autocomplete-all:
pip install django-admin-autocomplete-all
Add ‘autocomplete_all’ into INSTALLED_APPS, then collectstatic (both not required if you don’t play with get_search_results filtering.)
Features
Use select2 (autocomplete_fields) everywhere.
No need to change INSTALLED_APPS to achieve this. In your admin.py do import autocomplete_all as admin.
import autocomplete_all as admin
class MyModelAdmin(admin.ModelAdmin):
....
Alternatively import ModelAdmin, StackedInline and/or TabularInline ‘from autocomplete_all’ instead of ‘from admin’.
import autocomplete_all
class MyModelAdmin(autocomplete_all.ModelAdmin):
....
You will then need implement lot of search_fields=.. settings in related ModelAdmins. You can try start (ie. runserver) without adding search_fields and Django will show you what is required.
Get more context in get_search_results.
Standard Django autocomplete_fields cannot inside get_search_results distinguish between the ForeignKey which asks for the queryset, especially if 2 ForeignKey’s from single model target into same model (often example: ForeignKey into User model). If you add this package (‘autocomplete_all’) into INSTALLED_APPS, then ?key=… will be added into url. Inside get_search_results you will have access to: application, model, ForeignKey. See example in static/autocomplete_all/js/autocomplete_params.js.
Implement filtering into get_search_results of target ModelAdmin and add this to the source ModelAdmin:
class MyModelAdmin(ModelAdmin): # ModelAdmin can be standard or autocomplete_all.ModelAdmin
class Media:
js = ('autocomplete_all/js/autocomplete_params.js',)
You can also implement dynamic filters based on current value of other form fields. See Usage for details or read in source code: autocomplete_all/js/autocomplete_params.js
Hide danger buttons in Admin ChangeForm.
The edit & delete buttons near the ForeignKey have very difficult and danger logic what they will do. If you add autocomplete_all in INSTALLED_APPS before django.contrib.admin (or some application which replaces admin design, like django-baton), then the danger buttons will disapear. Place the autocomplete_all “lower” in list if you don’t want this effect.
Running Tests
Does the code actually work? /N/A while we haven’t the 1st test yet./
source <YOURVIRTUALENV>/bin/activate (myenv) $ pip install -r requirements_test.txt (myenv) $ tox
Credits
Tools used in rendering this package:
History
0.3.0 (2021-03-03)
if used in INSTALLED_APPS before django.contrib.admin (or admin rewriting app), danger ForeignKey buttons (edit,delete) will disapear
import admin methods (example: .register): in many cases you can just import autocomplete_all as admin and no more changes in admin.py are needed
0.2.6 (2020-05-06)
Fix: added class Media to fix some scenario(s) where widget is missing
0.2.4 (2020-01-27)
gives additional context in get_search_results()
Fix: missing .js (in 0.2.0-0.2.3)
0.1.6 (2020-01-24)
Fix in docs: proper attribute name is: autocomplete_except
0.1.4 (2020-01-22)
First acceptable version.
Release files for django-admin-autocomplete-all 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| django-admin-autocomplete-all-0.3.0.tar.gz | 11.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| django_admin_autocomplete_all-0.3.0-py2.py3-none-any.whl | Python 3, Python 2 | none | any | Details |
Total release size: 20.0 kB
Release files / django-admin-autocomplete-all-0.3.0.tar.gz
| Download URL | django-admin-autocomplete-all-0.3.0.tar.gz |
|---|---|
| Size | 11.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c6866e337ae019e7c9f246416012427eca9c5c3a1f76cf80f093dfc8d92ebc90
|
|
BLAKE2b-256 checksum How to use checksums |
6c0fbf7cc22219f7962b8b942da610527a69fca172a5358357514b78af0a09c7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.1.0 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.9.1
|
Release files / django_admin_autocomplete_all-0.3.0-py2.py3-none-any.whl
| Download URL | django_admin_autocomplete_all-0.3.0-py2.py3-none-any.whl |
|---|---|
| Size | 8.7 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
6695f5b9b3ec2de50e36743d499b1aca740e12ac3f9f2fc666cd4aba5b1eee07
|
|
BLAKE2b-256 checksum How to use checksums |
d94facd548cb7aca2555af812910066ad618a0cfed269b805c718a573f0250a1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.1.0 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.9.1
|