mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-25 01:48:38 -06:00
updated filter-for attr handling
This commit is contained in:
parent
f3cfc17a52
commit
5285b6926f
@ -2241,10 +2241,11 @@ class CableCreateForm(BootstrapMixin, ChainedFieldsMixin, forms.ModelForm):
|
|||||||
queryset=Site.objects.all(),
|
queryset=Site.objects.all(),
|
||||||
label='Site',
|
label='Site',
|
||||||
required=False,
|
required=False,
|
||||||
widget=forms.Select(
|
widget=APISelect(
|
||||||
attrs={
|
api_url='/api/dcim/sites/',
|
||||||
'data-filter-for-termination_b_rack': 'site_id',
|
filter_for={
|
||||||
'data-filter-for-termination_b_device': 'site_id',
|
'termination_b_rack': 'site_id',
|
||||||
|
'termination_b_device': 'site_id',
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@ -2257,8 +2258,10 @@ class CableCreateForm(BootstrapMixin, ChainedFieldsMixin, forms.ModelForm):
|
|||||||
required=False,
|
required=False,
|
||||||
widget=APISelect(
|
widget=APISelect(
|
||||||
api_url='/api/dcim/racks/',
|
api_url='/api/dcim/racks/',
|
||||||
|
filter_for={
|
||||||
|
'termination_b_device': 'rack_id',
|
||||||
|
},
|
||||||
attrs={
|
attrs={
|
||||||
'data-filter-for-termination_b_device': 'rack_id',
|
|
||||||
'nullable': 'true',
|
'nullable': 'true',
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@ -2270,23 +2273,15 @@ class CableCreateForm(BootstrapMixin, ChainedFieldsMixin, forms.ModelForm):
|
|||||||
('rack', 'termination_b_rack'),
|
('rack', 'termination_b_rack'),
|
||||||
),
|
),
|
||||||
label='Device',
|
label='Device',
|
||||||
|
required=False,
|
||||||
widget=APISelect(
|
widget=APISelect(
|
||||||
api_url='/api/dcim/devices/',
|
api_url='/api/dcim/devices/',
|
||||||
display_field='display_name',
|
display_field='display_name',
|
||||||
attrs={
|
filter_for={
|
||||||
'data-filter-for-termination_b_id': 'device_id',
|
'termination_b_id': 'device_id',
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
livesearch = forms.CharField(
|
|
||||||
required=False,
|
|
||||||
label='Device',
|
|
||||||
widget=Livesearch(
|
|
||||||
query_key='q',
|
|
||||||
query_url='dcim-api:device-list',
|
|
||||||
field_to_update='termination_b_device'
|
|
||||||
)
|
|
||||||
)
|
|
||||||
termination_b_type = forms.ModelChoiceField(
|
termination_b_type = forms.ModelChoiceField(
|
||||||
queryset=ContentType.objects.all(),
|
queryset=ContentType.objects.all(),
|
||||||
label='Type',
|
label='Type',
|
||||||
|
@ -238,6 +238,8 @@ class APISelect(SelectWithDisabled):
|
|||||||
:param api_url: API URL
|
:param api_url: API URL
|
||||||
:param display_field: (Optional) Field to display for child in selection list. Defaults to `name`.
|
:param display_field: (Optional) Field to display for child in selection list. Defaults to `name`.
|
||||||
:param disabled_indicator: (Optional) Mark option as disabled if this field equates true.
|
:param disabled_indicator: (Optional) Mark option as disabled if this field equates true.
|
||||||
|
:param filter_for: (Optional) A dict of chained form fields for which this field is a filter. The key is the
|
||||||
|
name of the filter-for field (child field) and the value is the name of the query param filter.
|
||||||
:param conditional_query_params: (Optional) A dict of URL query params to append to the URL if the
|
:param conditional_query_params: (Optional) A dict of URL query params to append to the URL if the
|
||||||
condition is met. The condition is the dict key and is specified in the form `<field_name>__<field_value>`.
|
condition is met. The condition is the dict key and is specified in the form `<field_name>__<field_value>`.
|
||||||
If the provided field value is selected for the given field, the URL query param will be appended to
|
If the provided field value is selected for the given field, the URL query param will be appended to
|
||||||
@ -252,6 +254,7 @@ class APISelect(SelectWithDisabled):
|
|||||||
api_url,
|
api_url,
|
||||||
display_field=None,
|
display_field=None,
|
||||||
disabled_indicator=None,
|
disabled_indicator=None,
|
||||||
|
filter_for=None,
|
||||||
conditional_query_params=None,
|
conditional_query_params=None,
|
||||||
additional_query_params=None,
|
additional_query_params=None,
|
||||||
*args,
|
*args,
|
||||||
@ -266,6 +269,9 @@ class APISelect(SelectWithDisabled):
|
|||||||
self.attrs['display-field'] = display_field
|
self.attrs['display-field'] = display_field
|
||||||
if disabled_indicator:
|
if disabled_indicator:
|
||||||
self.attrs['disabled-indicator'] = disabled_indicator
|
self.attrs['disabled-indicator'] = disabled_indicator
|
||||||
|
if filter_for:
|
||||||
|
for key, value in filter_for.items():
|
||||||
|
self.add_filter_for(key, value)
|
||||||
if conditional_query_params:
|
if conditional_query_params:
|
||||||
for key, value in conditional_query_params.items():
|
for key, value in conditional_query_params.items():
|
||||||
self.add_conditional_query_param(key, value)
|
self.add_conditional_query_param(key, value)
|
||||||
@ -273,6 +279,15 @@ class APISelect(SelectWithDisabled):
|
|||||||
for key, value in additional_query_params.items():
|
for key, value in additional_query_params.items():
|
||||||
self.add_additional_query_param(key, value)
|
self.add_additional_query_param(key, value)
|
||||||
|
|
||||||
|
def add_filter_for(self, name, value):
|
||||||
|
"""
|
||||||
|
Add details for an additional query param in the form of a data-filter-for-* attribute.
|
||||||
|
|
||||||
|
:param name: The name of the query param
|
||||||
|
:param value: The value of the query param
|
||||||
|
"""
|
||||||
|
self.attrs['data-filter-for-{}'.format(name)] = value
|
||||||
|
|
||||||
def add_additional_query_param(self, name, value):
|
def add_additional_query_param(self, name, value):
|
||||||
"""
|
"""
|
||||||
Add details for an additional query param in the form of a data-* attribute.
|
Add details for an additional query param in the form of a data-* attribute.
|
||||||
|
Loading…
Reference in New Issue
Block a user