raw_id_fields widget replacement that handles display of an object's string value on change.
Project description
django-dynamic-raw-id
A Django admin raw_id_fields widget replacement that handles display of an object’s string value on change and can be overridden via a template. See this example:
Installation
The app is compatible and tested with Python 2.7 → 3.7 and all versions of Django between 1.8 → 2.1.
Install the package with pip:
$ pip install django-dynamic-raw-id
Put dynamic_raw_id to your list of INSTALLED_APPS:
INSTALLED_APPS = (
# ... other apps
'dynamic_raw_id',
)
And add the urlpattern:
urlpatterns = [
# ...
url(r'^admin/dynamic_raw_id/', include('dynamic_raw_id.urls')),
]
dynamic_raw_id comes with some static files so don’t forget to run manage.py collectstatic.
Usage
To start using django-dynamic-raw-id in your application all you need to do is implement DynamicRawIDMixin in your ModelAdmin class and add the desired fields to a list of dynamic_raw_id_fields:
from dynamic_raw_id.admin import DynamicRawIDMixin
class UserProfileAdmin(DynamicRawIDMixin, admin.ModelAdmin):
dynamic_raw_id_fields = ('user',)
You can use dynamic_raw_id widgets in a Admin filter as well:
from dynamic_raw_id.admin import DynamicRawIDMixin
from dynamic_raw_id.filters import DynamicRawIDFilter
class UserProfileAdmin(DynamicRawIDMixin, admin.ModelAdmin):
list_filter = (
('dynamic_raw_id_fk', DynamicRawIDFilter),
)
Customizing the value of the dynamic widget
The coolest feature of django-dynamic-raw-id is the ability to customize the output of the value displayed alongside the DynamicRawIDWidget. There is a basic implementation if all you want is your object’s __unicode__ value. To change the value displayed all you need to do is implement the correct template.
django-dynamic-raw-id looks for this template structure dynamic_raw_id/<app>/<model>.html and dynamic_raw_id/<app>/multi_<model>.html (for multi-value lookups).
For instance, if I have a blog post with a User dynamic_raw_id field that I want display as Firstname Lastname, I would create the template dynamic_raw_id/auth/user.html with:
<span>{{ object.0.first_name }} {{ object.0.last_name }}</span>
A custom admin URL prefix
If you have your admin and the dynamic_raw_id scripts located on a different prefix than /admin/dynamic_raw_id/ you need adjust the DYNAMIC_RAW_ID_MOUNT_URL JS variable.
Example:
# In case the app is setup at /foobar/dynamic_raw_id/
url(r'^foobar/dynamic_raw_id/', include('dynamic_raw_id.urls')),
# Provide a
<script>
window.DYNAMIC_RAW_ID_MOUNT_URL = "{% url "admin:index" %}";
</script>
An ideal place is the admin base_site.html template. Full example:
{% extends "admin/base.html" %}
{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}
{% block extrahead %}
{{ block.super }}
<script>
window.DYNAMIC_RAW_ID_MOUNT_URL = "{% url "admin:index" %}";
</script>
{% endblock %}
{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1>
{% endblock %}
{% block nav-global %}{% endblock %}
Testing and Local Development
The testsuite uses Selenium to do frontend tests, we require Firefox and geckodriver to be installed. You can install geckodriver on OS X with Homebrew:
$ brew install geckodriver
Run the testsuite in your local environment using:
$ cd django-dynamic-raw-id/
$ pipenv install --dev
$ pipenv run test
Or use tox to test against various Django and Python versions:
$ tox -r
You can also invoke the test suite or other ‘manage.py’ commands by calling the django-admin tool with the test app settings:
$ cd django-dynamic-raw-id/
$ pipenv install --dev
$ pipenv run django-admin
$ pipenv run django-admin test
This also allows you to run the internal testing app in a testserver, to preview a sample of what django-dynamic-raw-id is doing:
$ pipenv run django-admin migrate
$ pipenv run django-admin createsuperuser
$ pipenv run django-admin runserver
DJANGO_SETTINGS_MODULE=dynamic_raw_id.tests.testapp.settings
Changelog
v2.7 (2020-05-02)
Django 3.0 compatibility and tests.
v2.6 (2019-06-21)
BACKWARDS INCOMPATIBLE: Dropped support for Django <1.11.
BACKWARDS INCOMPATIBLE: Dropped support for Python 3.4.
Django 2.2 compatibility and tests.
General code cleanup.
Pipenv support for local development.
Some visual fixes around icons and alignment.
v2.5 (2018-12-09)
Django 2.1 compatibility and tests.
v2.4 (2018-04-09)
Fixes missing icons in Admin views.
Fixes missing JS handling when using a custom /admin/ url.
v2.3 (2018-01-18)
BACKWARDS INCOMPATIBLE: Renamed the project to django-dynamic-raw-id. to reflect what it’s actually doing.
Fixed glass lookup icon in Django 1.10 and below.
Specific ordering of media asset loading.
v1.2 (2018-01-17)
Multiple fixes and enhancements.
Full Selenium based testsuite.
Django 2.0 and Python 3 compatibility.
pipenv support.
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-dynamic-raw-id-2.7.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | ae14a3021e565022f27dd17556ce746508bce2b410470fe114a3f7f60ed9e6cf |
|
MD5 | cd4b9e5b1557a98aa0b35504b9216203 |
|
BLAKE2b-256 | c2795d24749c20528f880478098a9f1fe8f08e15d5f5cd7813b05583e6d6f71b |
Hashes for django_dynamic_raw_id-2.7-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5d77fbad6eedd2658a21027268d4c706239f0ac4837916c781323a87f78d3796 |
|
MD5 | ee845a2eddc2bfdc56f543ef9447c112 |
|
BLAKE2b-256 | 737be7c73db2cc7a9e6faf4d78c46e00d63fda864c8daeb5edfcd6f6a3019e10 |