【问题标题】:django rest framework - what URL I should give for generic filters?django rest 框架 - 我应该为通用过滤器提供什么 URL?
【发布时间】:2015-08-29 23:23:14
【问题描述】:

我正在使用带有 rest 框架的 django,并且我正在尝试使用通用过滤器后端。 我的观点是这样的:

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

文档对此不是很清楚。

谢谢!

【问题讨论】:

  • 如果您使用viewsets,那么您可以使用DefaultRouterSimpleRouter 自动配置您的列表和详细端点的url。否则,您将不得不手动提供这些视图和 urlpatterns。
  • 哦,太好了,谢谢。以及如何实现 get_queryset()?我是否需要实现它并在有和没有参数的情况下处理案例?还是它也会自动发生?我缺少的是泛型的完整示例。ListAPIView + 获取单个对象 + 过滤器以查看它们如何连接..
  • 尼斯,使用DefaultRouterSimpleRouter 就足够了。您无需实现 get_queryset() 即可获得此行为。

标签: django django-rest-framework


【解决方案1】:

文档的意思是,如果您有一个 DetailView 并且您在该视图上配置了过滤器,那么如果现有项目与过滤条件不匹配,您可能会在现有项目上出现 404。

请注意,如果您使用ViewSet,则可以免费获得详细视图

【讨论】:

    猜你喜欢
    • 2014-02-17
    • 2019-11-18
    • 2012-12-24
    • 2017-05-27
    • 2017-10-26
    • 2018-05-17
    • 2018-06-28
    • 2016-11-22
    • 2016-06-07
    相关资源
    最近更新 更多