Try to filter relations to site and device role

This commit is contained in:
Joseph Kennedy 2017-08-30 20:49:52 -04:00
parent c745c7bbfb
commit f52668732d

View File

@ -592,24 +592,19 @@ class InterfaceListFilter(django_filters.FilterSet):
label='Search', label='Search',
) )
site_id = django_filters.ModelMultipleChoiceFilter( site_id = django_filters.ModelMultipleChoiceFilter(
queryset=Site.objects.all(), method='_filter_site',
label='Site (ID)', label='Site (ID)',
) )
site = django_filters.ModelMultipleChoiceFilter( site = django_filters.ModelMultipleChoiceFilter(
name='site__slug', method='_filter_site',
queryset=Site.objects.all(),
to_field_name='slug',
label='Site name (slug)', label='Site name (slug)',
) )
role_id = django_filters.ModelMultipleChoiceFilter( role_id = django_filters.ModelMultipleChoiceFilter(
name='device_role_id', method='_filter_role',
queryset=DeviceRole.objects.all(),
label='Role (ID)', label='Role (ID)',
) )
role = django_filters.ModelMultipleChoiceFilter( role = django_filters.ModelMultipleChoiceFilter(
name='device_role__slug', method='_filter_role',
queryset=DeviceRole.objects.all(),
to_field_name='slug',
label='Role (slug)', label='Role (slug)',
) )
type = django_filters.CharFilter( type = django_filters.CharFilter(
@ -625,6 +620,20 @@ class InterfaceListFilter(django_filters.FilterSet):
model = Interface model = Interface
fields = ['form_factor', 'enabled', 'mtu'] fields = ['form_factor', 'enabled', 'mtu']
def filter_site(self, queryset, name, value):
try:
site = Site.objects.select_related('device_id__site').get(**{name: value})
return queryset
except Device.DoesNotExist:
return queryset.none()
def filter_role(self, queryset, name, value):
try:
site = DeviceRole.objects.select_related('device_id__device_role').get(**{name: value})
return queryset
except Device.DoesNotExist:
return queryset.none()
def filter_type(self, queryset, name, value): def filter_type(self, queryset, name, value):
value = value.strip().lower() value = value.strip().lower()
return { return {