tôi đã tạo ra một lớp AssetsFilter
:Django swagger- Làm thế nào để vô hiệu hóa bộ lọc truy vấn DjangoFilterBackend từ xóa, đặt phương pháp?
from django_filters import Filter
from django_filters import rest_framework as filters
from django_filters.fields import Lookup
from .models import Assets
class MyListFilter(Filter):
def filter(self, qs, value):
value_list = value.split(',')
return super(ListFilter, self).filter(qs, Lookup(value_list, 'in'))
class AssetsFilter(filters.FilterSet):
name = filters.CharFilter(lookup_expr='icontains', help_text=u'Filter by name')
criticality = MyListFilter(name='critical', help_text=u'Filter by_id')
class Meta:
model = Assets
fields = ['name', 'criticality ']
Bây giờ tôi đang sử dụng bộ lọc này trong Viewset của tôi như sau:
from .serializers import AssetSerializers
from .filters import AssetsFilter
class AssetViewSet(viewsets.ModelViewSet):
"""
This viewset automatically provides `list`, `create`, `retrieve`,
`update` and `destroy` actions.
"""
queryset = Assets.objects.all()
serializer_class = AssetSerializers
filter_backends = (DjangoFilterBackend,)
filter_class = AssetsFilter
http_method_names = ['get', 'post', 'put', 'delete']
def list(self, request):
"""
Returns a list of Asset.
"""
return super(AssetViewSet, self).list(request)
def create(self, request):
"""
Creates a new Asset.<br>
"""
return super(AssetViewSet, self).create(request)
def destroy(self, request, pk=None):
"""
Deletes a Asset.
"""
return super(AssetViewSet, self).destroy(request, pk=pk)
def retrieve(self, request, pk=None):
"""
Returns a Asset with id={id}
"""
return super(AssetViewSet, self).retrieve(request, pk=pk)
def update(self, request, pk=None, *args, **kwargs):
"""
Updates an existing Asset.<br>
"""
return super(AssetViewSet, self).update(request, pk=pk, *args, **kwargs)
Khi tài liệu vênh vang được tạo ra, các lĩnh vực lọc xuất hiện trong GET (list)
, GET (retrieve)
như mong đợi, nhưng chúng cũng xuất hiện trong các số POST
, PUT
, PATCH
và DELETE
nơi chúng không xuất hiện.
Làm cách nào để vô hiệu hóa các thông số đó xuất hiện trong phiên bản mới nhất của django-phần còn lại-swagger và DRF?