如何在django-rest-framework中使用查询参数进行详情视图查找?
我有一个 Model
,结构大概是这样的:
class Bid(models.Model):
user = models.ForeignKey(User)
url = models.URLField()
ask = models.DecimalField(max_digits=6, decimal_places=2)
offer = models.DecimalField(max_digits=6, decimal_places=2)
我想用 ModelViewSet
来通过 url
字段查找一个具体的对象。所以我在我的 ModelViewSet
中加了 lookup_url_kwarg = 'url'
:
class BidViewSet(viewsets.ModelViewSet):
model = Bid
serializer_class = BidSerializer
lookup_url_kwarg = 'url'
我在用 DefaultRouter
:
router = routers.DefaultRouter()
router.register(r'bids', views.BidViewSet)
但是
GET /bids/?url={url}
这并没有奏效。请求总是被路由到 list
方法。 :(
我尝试了一个自定义的路由器:
class BidRouter(routers.SimpleRouter):
""" Custom Router to allow /bids/?url= for detail view """
def __init__(self, trailing_slash=True):
self.routes.append(routers.Route(
url=r'^{prefix}/?url={lookup}{trailing_slash}$',
mapping={
'get': 'retrieve',
'put': 'update',
'patch': 'partial_update',
'delete': 'destroy'
},
name='{basename}-query-detail',
initkwargs={'suffix': 'Instance'}
))
super(BidRouter, self).__init__(trailing_slash=trailing_slash)
bid_router = BidRouter()
bid_router.register(r'bids', views.BidViewSet)
但它仍然把请求路由到 list
方法。
那么,我该如何使用查询参数来查找详细信息呢?
1 个回答
0
根据django-rest-framework的文档,我觉得你应该使用lookup_field,而不是lookup_url_kwarg。你的绑定应该是:
GET /bids/{url}