mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-29 03:46:25 -06:00
ScriptVar subclasses indicate whether they support multiple values, and ScriptForm honors that
This commit is contained in:
parent
cd236aa886
commit
32094643f9
@ -1,6 +1,7 @@
|
|||||||
from django import forms
|
from django import forms
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
|
from django.utils.datastructures import MultiValueDict
|
||||||
from mptt.forms import TreeNodeMultipleChoiceField
|
from mptt.forms import TreeNodeMultipleChoiceField
|
||||||
from taggit.forms import TagField as TagField_
|
from taggit.forms import TagField as TagField_
|
||||||
|
|
||||||
@ -431,6 +432,23 @@ class ScriptForm(BootstrapMixin, forms.Form):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def __init__(self, vars, *args, commit_default=True, **kwargs):
|
def __init__(self, vars, *args, commit_default=True, **kwargs):
|
||||||
|
from .scripts import MultiObjectVar
|
||||||
|
|
||||||
|
if 'initial' in kwargs:
|
||||||
|
orig_initial = kwargs['initial']
|
||||||
|
if isinstance(orig_initial, MultiValueDict):
|
||||||
|
# Convert MultiValueDict to a normal dict with single or multiple values based on the field type
|
||||||
|
new_initial = {}
|
||||||
|
for name in orig_initial:
|
||||||
|
var = vars.get(name)
|
||||||
|
if var and var.multiple_values:
|
||||||
|
# Force MultiValueDict to give us the list of values
|
||||||
|
new_initial[name] = orig_initial.getlist(name)
|
||||||
|
else:
|
||||||
|
# By default MultiValueDict gives us the last value
|
||||||
|
new_initial[name] = orig_initial.get(name)
|
||||||
|
|
||||||
|
kwargs['initial'] = new_initial
|
||||||
|
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
@ -50,6 +50,9 @@ class ScriptVariable:
|
|||||||
"""
|
"""
|
||||||
form_field = forms.CharField
|
form_field = forms.CharField
|
||||||
|
|
||||||
|
# Accept multiple values (e.g. MultiObjectVar)
|
||||||
|
multiple_values = False
|
||||||
|
|
||||||
def __init__(self, label='', description='', default=None, required=True, widget=None):
|
def __init__(self, label='', description='', default=None, required=True, widget=None):
|
||||||
|
|
||||||
# Initialize field attributes
|
# Initialize field attributes
|
||||||
@ -187,6 +190,7 @@ class MultiObjectVar(ScriptVariable):
|
|||||||
Like ObjectVar, but can represent one or more objects.
|
Like ObjectVar, but can represent one or more objects.
|
||||||
"""
|
"""
|
||||||
form_field = DynamicModelMultipleChoiceField
|
form_field = DynamicModelMultipleChoiceField
|
||||||
|
multiple_values = True
|
||||||
|
|
||||||
def __init__(self, queryset, *args, **kwargs):
|
def __init__(self, queryset, *args, **kwargs):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
Loading…
Reference in New Issue
Block a user