【发布时间】:2015-05-29 15:54:38
【问题描述】:
我正在尝试使用 DRF 3.1 创建 API。我首先使用 ModelViewSet 创建管理函数并将它们注册到 DefaultRouter。这非常有效,并且默认 API 根视图在浏览器中查看时会生成适当的链接。然后,我使用 ReadOnlyModelViewSet 为标准用户创建了更多受限视图集,当我尝试向路由器注册这些受限视图集时出现问题,因为 ReadOnlyModelViewSets 似乎覆盖了 API 根视图上的链接。生成的 url 在浏览器中输入时似乎可以工作,但 API 根视图上的链接与我预期的不同
序列化器.py
class AdminUnitSerializer(serializers.HyperlinkedModelSerializer):
'''
model serializer for admin users containing all fields
'''
url = HyperlinkedIdentityField(view_name='unit-detail')
class Meta:
model = Unit
fields = ('url', 'id', 'name', 'symbol', 'converters_from', 'converters_to')
class UserUnitSerializer(serializers.HyperlinkedModelSerializer):
'''
model serializer for standard users containing restricted set of fields
'''
url = HyperlinkedIdentityField(view_name='unit-detail')
class Meta:
model = Unit
fields = ('url', 'id', 'name', 'symbol')
views.py
class AdminUnitViewSet(viewsets.ModelViewSet):
'''
simple viewset providing CRUD operations on unit objects
'''
queryset = models.Unit.objects.all()
serializer_class = serializers.AdminUnitSerializer
permission_classes = (permissions.IsAdminUser,)
class UserUnitViewSet(viewsets.ReadOnlyModelViewSet):
'''
read only view set providing list and detail views for unit objects
'''
queryset = models.Unit.objects.all()
serializer_class = serializers.UserUnitSerializer
permission_classes(permissions.IsAuthenticated,)
urls.py
router.register(r'manangeunits', views.AdminUnitViewSet)
router.register(r'readunits', views.UserUnitViewSet)
urlpatterns = [
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
url(r'^rest-auth/', include('rest_auth.urls')),
url(r'^', include(router.urls))
]
这会产生一个像这样的默认 API 根视图
{
"manangeunits": "http://localhost:8000/readunits/",
"readunits": "http://localhost:8000/readunits/",
}
而我正在寻找的是这个
{
"manangeunits": "htt://localhost:8000/manageunits/",
"readunits": "htt://localhost:8000/readunits/",
}
url 'htt://localhost:8000/manageunits/' 在浏览器中输入地址时有效且可访问,它只是不会出现在 API 根视图中
任何帮助将不胜感激
【问题讨论】:
标签: django django-rest-framework