我正在使用django和rest框架,我正在尝试使用通用过滤器后端。 我的观点如下:
class Agents(generics.ListAPIView):
serializer_class = serializer.AgentSerializer
model = serializer_class.Meta.model
filter_backends = (filters.DjangoFilterBackend,)
queryset = models.Agent.objects.all()
filter_fields = ('available', 'online', 'agency')
我添加了以下网址:
url('^api/agents/$', api_views.Agents.as_view()),
现在当我输入这样的网址时:
api/agents/?online=False
api/agents/?available=True
它可以工作,并根据过滤器返回正确的列表。但是,当我尝试这个时:
api/agents/123/?online=False
我找不到页面。
阅读this doc告诉我,当我使用通用过滤器时,它也适用于返回单个对象,并且它们提供以下URL作为示例: http://example.com/api/products/4675/?category=clothing&max_price=10.00
但我不明白我是否应该专门创建自己的URL来获取id的单个对象?还是假设自动发生?我应该实现一个get_queryset(),它从URL获取参数,并返回所有对象或特定对象,并有两个使用相同视图的网址?
文档对此并不十分清楚。
谢谢!
答案 0 :(得分:1)
文档的含义是,如果您有DetailView并且在该视图上配置了过滤器,那么如果现有项目与过滤条件不匹配,您可以拥有404。
请注意,如果您使用ViewSet