我有一个简单的问题:目前我可以这样做以从后端获取对象:
http://127.0.0.1:8000/api/v1/boats/boats?id=10
http://127.0.0.1:8000/api/v1/boats/boats?home_port=98&id=5
但我想根据ID列表或家庭端口列表获得一系列船只,我已经尝试过:
^{pr2}$但这些都不管用。使用django过滤器最好的方法是什么,URL规则是如何定义的?在
以下是我的观点:
class BoatList(generics.ListCreateAPIView):
permission_classes = (IsOwnerOrReadOnly,)
serializer_class = BoatSerializer
queryset = Boat.objects.all()
filter_backends = (filters.DjangoFilterBackend,)
filter_fields = ('id', 'home_port',)
我标记的解决方案100%地回答了我的问题,但我最终根据另一篇使用过滤器的帖子实现了一些不同的东西:
class ListFilter(Filter):
def filter(self, qs, value):
if not value:
return qs
self.lookup_type = 'in'
values = value.split(',')
return super(ListFilter, self).filter(qs, values)
class BoatFilter(FilterSet):
ids = ListFilter(name='id')
class Meta:
model = Boat
fields = ['home_port', 'ids']
class BoatList(generics.ListCreateAPIView):
permission_classes = (IsOwnerOrReadOnly,)
serializer_class = BoatSerializer
queryset = Boat.objects.all()
filter_backends = (filters.DjangoFilterBackend,)
filter_class = BoatFilter
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
多尼尔给出的答案很贴切,但我想
request
在使用它的地方是不可用的。在还有另一种方法这个。你无法重写
get_queryset
方法。可按如下方式进行:你只需创建一个过滤器类
在视图集中使用
^{pr2}$您可以看到django过滤器的以下文档: https://django-filter.readthedocs.io/en/master/ref/filters.html?highlight=BaseInFilter
试试这个:
网址:
http://127.0.0.1:8000/api/v1/boats/boats?id=10,11
相关问题 更多 >
编程相关推荐