Choices of select widget changes while the value of another filed changes.
Project description
django-gazing-select-widget
Choices of select widget changes while the value of another filed changes.
Install
pip install django-gazing-select-widget
DjangoGazingSelectWidget Init Parameters
class DjangoGazingSelectWidget(Select):
def __init__(self,
gazing_field_name,
this_field_name,
choices_related=None,
gazing_related=True,
optgroups_related=None,
empty_label="-"*10,
hide_all_if_empty=True,
attrs=None,
choices=(),
):
...
- gazing_field_name: Name of the gazing field.
- this_field_name: Name of this field.
- choices_related: List of tuple (option_value, related_value)
- It means, if the gazing_field value equals to related_value, then the option with option_value will be show.
- gazing_related: Default to true, means gazing field is at the same level with this field.
- If set to false, then the gazing field is always at the top level of the form.
- empty_label: Defualt to "-"*10. Empty value option for this field.
- hide_all_if_empty: Default to true. If true, hide all options if gazing value is empty. If false, show all options if gazing value is empty.
- attrs: Same with system's default Select widget.
- choices: Same with system's default Select widget.
- choices can be a callable object, if it's a callable object, it will be called again before get_context.
Usage
**pro/settings.py
INSTALLED_APPS = [
...
'django_gazing_select_widget',
...
]
app/admin.py
from django.contrib import admin
from django import forms
from django_gazing_select_widget.widgets import DjangoGazingSelectWidget
from .models import Category
cat1_choices = [
("", "-"*10),
(1, "1"),
(2, "2"),
]
cat2_choices = [
("group1", [
(1, "a1"),
(2, "b1"),
(3, "c1"),
(4, "d1"),
]),
("group2", [
(5, "a2"),
(6, "b2"),
(7, "c2"),
(8, "d2"),
]),
]
cat2_choices_related = {
1: ["1"],
2: ["1"],
3: ["1"],
4: ["1"],
5: ["2"],
6: ["2"],
7: ["2"],
8: ["2"],
}
class CategoryForm(forms.ModelForm):
class Meta:
model = Category
exclude = []
widgets = {
"cat1": forms.Select(choices=cat1_choices),
"cat2": DjangoGazingSelectWidget(gazing_field="cat1", choices=cat2_choices, choices_related=cat2_choices_related, hide_all_if_empty=False),
}
class CategoryAdmin(admin.ModelAdmin):
list_display = ["cat1", "cat2", "name"]
form = CategoryForm
admin.site.register(Category, CategoryAdmin)
Note:
- field cat2 is gazing at field cat1.
- if the field cat1's value is empty, show none options in field cat2.
- if the field cat1's value is 1, show group1 options in field cat2.
- if the field cat1's value is 2, show group2 options in field cat2.
Preview
Releases
v0.1.2
- Fix callable problem.
v0.1.1
- Add callable choices support.
- Add gazing_related support.
v0.1.0
- First release.
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
Close
Hashes for django-gazing-select-widget-0.1.2.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9a2acf3248f49e3cf6f20283ed3e3de9ab398ad83acc9cb7c873d3ee538c9770 |
|
MD5 | ddf11577018883b1dae433fd15f46efe |
|
BLAKE2b-256 | bea839145bc577ab6a2fe0ced99fd30b949ccd71c3c9ac9bdf2a764003622a60 |
Close
Hashes for django_gazing_select_widget-0.1.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9d8ed9fa4a9744db8aaeed62f99219922d1bbe0a7e12094058c586b08d490235 |
|
MD5 | caff163d33981a67941ded65bf4087e6 |
|
BLAKE2b-256 | 39c08424f6250b1df8890c9492551bb7e51b8d18e519ae23d579f170ef945bea |