|
20 | 20 | from django.db.models import Count, Q |
21 | 21 | from django.shortcuts import get_object_or_404, redirect, render |
22 | 22 | from django.urls import reverse |
| 23 | +from django_filters import rest_framework as filters |
23 | 24 | from django_tables2 import RequestConfig |
24 | 25 | from rest_framework import viewsets |
25 | 26 | from taggit.models import Tag |
@@ -279,13 +280,26 @@ def host_bulk_action(request): |
279 | 280 | return redirect('hosts:host_list') |
280 | 281 |
|
281 | 282 |
|
| 283 | +class HostFilter(filters.FilterSet): |
| 284 | + package_id = filters.NumberFilter(field_name='packages', lookup_expr='exact') |
| 285 | + package_name = filters.CharFilter(field_name='packages__name__name', lookup_expr='exact') |
| 286 | + package_version = filters.CharFilter(field_name='packages__version', lookup_expr='exact') |
| 287 | + package_release = filters.CharFilter(field_name='packages__release', lookup_expr='exact') |
| 288 | + package_epoch = filters.CharFilter(field_name='packages__epoch', lookup_expr='exact') |
| 289 | + package_arch = filters.CharFilter(field_name='packages__arch__name', lookup_expr='exact') |
| 290 | + |
| 291 | + class Meta: |
| 292 | + model = Host |
| 293 | + fields = ['hostname'] |
| 294 | + |
| 295 | + |
282 | 296 | class HostViewSet(viewsets.ModelViewSet): |
283 | 297 | """ |
284 | 298 | API endpoint that allows hosts to be viewed or edited. |
285 | 299 | """ |
286 | 300 | queryset = Host.objects.all() |
287 | 301 | serializer_class = HostSerializer |
288 | | - filterset_fields = ['hostname'] |
| 302 | + filterset_class = HostFilter |
289 | 303 |
|
290 | 304 |
|
291 | 305 | class HostRepoViewSet(viewsets.ModelViewSet): |
|
0 commit comments