django rest framework - 我应该为通用过滤器提供哪些URL?

时间:2015-06-14 11:11:30

标签: django django-rest-framework

我正在使用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获取参数,并返回所有对象或特定对象,并有两个使用相同视图的网址?

文档对此并不十分清楚。

谢谢!

1 个答案:

答案 0 :(得分:1)

文档的含义是,如果您有DetailView并且在该视图上配置了过滤器,那么如果现有项目与过滤条件不匹配,您可以拥有404。

请注意,如果您使用ViewSet

,则可以免费获得详细视图