mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-13 16:47:34 -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
|
||||
|
||||
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 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 (value := form.data[field_name]) is None:
|
||||
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 form.get_initial_for_field(field, field_name)
|
||||
|
@ -448,3 +448,30 @@ class GetFieldValueTest(TestCase):
|
||||
get_field_value(form, 'site'),
|
||||
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