mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
#259: Add present_in_vrf filters for IPAddress
This commit is contained in:
@ -386,6 +386,17 @@ class IPAddressFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldFilterSet,
|
|||||||
to_field_name='rd',
|
to_field_name='rd',
|
||||||
label='VRF (RD)',
|
label='VRF (RD)',
|
||||||
)
|
)
|
||||||
|
present_in_vrf_id = django_filters.ModelChoiceFilter(
|
||||||
|
queryset=VRF.objects.all(),
|
||||||
|
method='filter_present_in_vrf',
|
||||||
|
label='VRF'
|
||||||
|
)
|
||||||
|
present_in_vrf = django_filters.ModelChoiceFilter(
|
||||||
|
queryset=VRF.objects.all(),
|
||||||
|
method='filter_present_in_vrf',
|
||||||
|
to_field_name='rd',
|
||||||
|
label='VRF (RD)',
|
||||||
|
)
|
||||||
device = MultiValueCharFilter(
|
device = MultiValueCharFilter(
|
||||||
method='filter_device',
|
method='filter_device',
|
||||||
field_name='name',
|
field_name='name',
|
||||||
@ -476,6 +487,14 @@ class IPAddressFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldFilterSet,
|
|||||||
return queryset
|
return queryset
|
||||||
return queryset.filter(address__net_mask_length=value)
|
return queryset.filter(address__net_mask_length=value)
|
||||||
|
|
||||||
|
def filter_present_in_vrf(self, queryset, name, vrf):
|
||||||
|
if vrf is None:
|
||||||
|
return queryset.none
|
||||||
|
return queryset.filter(
|
||||||
|
Q(vrf=vrf) |
|
||||||
|
Q(vrf__export_targets__in=vrf.import_targets.all())
|
||||||
|
)
|
||||||
|
|
||||||
def filter_device(self, queryset, name, value):
|
def filter_device(self, queryset, name, value):
|
||||||
devices = Device.objects.filter(**{'{}__in'.format(name): value})
|
devices = Device.objects.filter(**{'{}__in'.format(name): value})
|
||||||
if not devices.exists():
|
if not devices.exists():
|
||||||
|
@ -998,8 +998,8 @@ class IPAddressAssignForm(BootstrapMixin, forms.Form):
|
|||||||
class IPAddressFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldFilterForm):
|
class IPAddressFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldFilterForm):
|
||||||
model = IPAddress
|
model = IPAddress
|
||||||
field_order = [
|
field_order = [
|
||||||
'q', 'parent', 'family', 'mask_length', 'vrf_id', 'status', 'role', 'assigned_to_interface', 'tenant_group',
|
'q', 'parent', 'family', 'mask_length', 'vrf_id', 'present_in_vrf_id', 'status', 'role',
|
||||||
'tenant',
|
'assigned_to_interface', 'tenant_group', 'tenant',
|
||||||
]
|
]
|
||||||
q = forms.CharField(
|
q = forms.CharField(
|
||||||
required=False,
|
required=False,
|
||||||
@ -1029,9 +1029,14 @@ class IPAddressFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldFilterFo
|
|||||||
vrf_id = DynamicModelMultipleChoiceField(
|
vrf_id = DynamicModelMultipleChoiceField(
|
||||||
queryset=VRF.objects.all(),
|
queryset=VRF.objects.all(),
|
||||||
required=False,
|
required=False,
|
||||||
label='VRF',
|
label='Assigned VRF',
|
||||||
null_option='Global'
|
null_option='Global'
|
||||||
)
|
)
|
||||||
|
present_in_vrf_id = DynamicModelChoiceField(
|
||||||
|
queryset=VRF.objects.all(),
|
||||||
|
required=False,
|
||||||
|
label='Present in VRF'
|
||||||
|
)
|
||||||
status = forms.MultipleChoiceField(
|
status = forms.MultipleChoiceField(
|
||||||
choices=IPAddressStatusChoices,
|
choices=IPAddressStatusChoices,
|
||||||
required=False,
|
required=False,
|
||||||
|
Reference in New Issue
Block a user