4
使用Django 1.6和REST框架2.路由一个REST资源作为第二剩余资源的子
我有一个URI
/rest/parent_resource/951
下面,我想提出一个第二资源作为一个孩子这一资源,以创建,列表,获取和删除方法
/rest/parent_resource/951/child_resource
我是新和仍然在学习,我想这个网址配置:
router.register(r'parent_resource', diliMarketplace.MarketPlaceProposalViewSet_Internal)
再注册,我添加路由器:
url(r'^rest/parent_resource/(?P<parent_resource_pk>[0-9]+)/child_resource/$', ChildViewset.as_view())
url(r'^rest/', include(router.urls)),
及以下视图集:
class ChildViewset(viewsets.ModelViewSet):
paginate_by = 100
queryset = diliModels\
.ChildModel\
.objects\
.exclude(status=0)\
.prefetch_related('parent_model')\
.all()
serializer_class = diliSerializers.MarketPlaceProposalBidSerializer
permission_classes = (MyAuth.MyAuthIsAuthenticated,)
def get_queryset(self):
queryset = None
parent_pk = self.kwargs['parent_resource_pk']
if proposal_pk is not None:
request = self.get_serializer_context()['request']
authenticatedUserId = request.user.user_id
queryset = self.queryset.filter(parent_model__id = parent_pk) & \
self.queryset.filter(parent_model__user__user_id = authenticatedUserId)
return queryset
我正在(以我在正确的方向前进,希望)错误:
Internal Server Error: /rest/parent_resource/951/child_resource/
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\django\core\handlers\base.py", line 115, in get_response
response = callback(request, *callback_args, **callback_kwargs)
File "C:\Python27\lib\site-packages\rest_framework\viewsets.py", line 69, in view
for method, action in actions.items():
AttributeError: 'NoneType' object has no attribute 'items'
我认为URL路由器生成的REGEX过于激进,并且路由到我的p arent_resource视图集中和寻找一个@Action或@link ...
所以发生的是URL路由的路由这给parnet_resource试图找到一个child_resource @action。所以问题是如何路由到子资源视图集,而无需通过parent_resource viewset @action方法进行路由。