mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-16 04:02:52 -06:00
Update get_field_value
to handle multiple incoming values
This commit is contained in:
parent
8aacef60a3
commit
462839836c
@ -1,7 +1,8 @@
|
|||||||
import re
|
import re
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.forms.models import fields_for_model
|
from django.forms import MultipleChoiceField
|
||||||
|
from django.forms.models import fields_for_model, ModelMultipleChoiceField
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
|
|
||||||
from utilities.choices import unpack_grouped_choices
|
from utilities.choices import unpack_grouped_choices
|
||||||
@ -139,7 +140,16 @@ def get_field_value(form, field_name):
|
|||||||
if form.is_bound and field_name in form.data:
|
if form.is_bound and field_name in form.data:
|
||||||
if (value := form.data[field_name]) is None:
|
if (value := form.data[field_name]) is None:
|
||||||
return
|
return
|
||||||
if hasattr(field, 'valid_value') and field.valid_value(value):
|
if isinstance(field, (MultipleChoiceField, ModelMultipleChoiceField)) and isinstance(value, (list, tuple)):
|
||||||
|
values = []
|
||||||
|
for v in value:
|
||||||
|
if hasattr(field, 'valid_value') and field.valid_value(v):
|
||||||
|
values.append(v)
|
||||||
|
|
||||||
|
if values:
|
||||||
|
return values
|
||||||
|
|
||||||
|
elif hasattr(field, 'valid_value') and field.valid_value(value):
|
||||||
return value
|
return value
|
||||||
|
|
||||||
return form.get_initial_for_field(field, field_name)
|
return form.get_initial_for_field(field, field_name)
|
||||||
|
@ -448,3 +448,30 @@ class GetFieldValueTest(TestCase):
|
|||||||
get_field_value(form, 'site'),
|
get_field_value(form, 'site'),
|
||||||
None
|
None
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class MultipleGetFieldValueTest(GetFieldValueTest):
|
||||||
|
@classmethod
|
||||||
|
def setUpTestData(cls):
|
||||||
|
super().setUpTestData()
|
||||||
|
|
||||||
|
class TestForm(forms.Form):
|
||||||
|
site = forms.ModelMultipleChoiceField(
|
||||||
|
queryset=Site.objects.all(),
|
||||||
|
required=False
|
||||||
|
)
|
||||||
|
cls.form_class = TestForm
|
||||||
|
|
||||||
|
def test_bound_with_list_without_initial(self):
|
||||||
|
form = self.form_class({'site': (self.sites[0].pk, self.sites[1].pk)}, initial={'site': None})
|
||||||
|
self.assertEqual(
|
||||||
|
get_field_value(form, 'site'),
|
||||||
|
[self.sites[0].pk, self.sites[1].pk]
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_bound_with_list_with_initial(self):
|
||||||
|
form = self.form_class({'site': (self.sites[0].pk, self.sites[1].pk)}, initial={'site': self.sites[0]})
|
||||||
|
self.assertEqual(
|
||||||
|
get_field_value(form, 'site'),
|
||||||
|
[self.sites[0].pk, self.sites[1].pk]
|
||||||
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user