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
...
(不起作用) 我对此很陌生,任何帮助将不胜感激。 []
我真的不明白问题是什么。没有人可能会向
/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
是类属性的代码产生不必要的副作用。