使用djangorestframwork和django_filters时,‘query’可以部分有效吗?

问题描述 投票:0回答:1
import django_filters
from .models import  Drug
class DrugFilter(django_filters.FilterSet):  # drug filter
    class Meta:
        model = Drug
        fields = {
            "drug": ["icontains"],
            "drug_zh": ["icontains"],
            "drugncode": ["exact"],
        }

class DrugViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows drug to be viewed or edited.
    """

    queryset = Drug.objects.all().order_by("drugncode")
    serializer_class = DrugmarkSerializer
    permission_classes = [permissions.AllowAny]
    filter_backends = [DjangoFilterBackend]
    filterset_class = DrugFilter

但是,我的所有 API(列表、读取、更新、修补、删除)都包含查询参数。

只有“列表”需要参数。

...

    def get_filterset_class(self):
        if self.action in ["list"]:
            return DrugFilter
        return None
...

(不起作用) 我对此很陌生,任何帮助将不胜感激。 [enter image description here]

django-rest-framework django-filter
1个回答
0
投票

我真的不明白问题是什么。没有人可能会向

/api/drugs/420/?drug__icontains=Tetrahydrocannabinol
发出删除请求,但如果他们这样做并且过滤器匹配,它将删除药物。因此,它可以用作额外的安全机制,以防止删除错误的药物。

如果你确实想使用它,你可以将其转换为属性,例如:

class DrugViewSet(viewsets.ModelViewSet):
    queryset = Drug.objects.all().order_by('drugncode')
    serializer_class = DrugmarkSerializer
    permission_classes = [permissions.AllowAny]
    filter_backends = [DjangoFilterBackend]

    @property
    def filterset_class(self):
        if self.action == 'list':
            return DrugFilter
        return None

但这可能会对认为

filterset_class
是类属性的代码产生不必要的副作用。

© www.soinside.com 2019 - 2024. All rights reserved.