【发布时间】:2014-06-22 12:36:15
【问题描述】:
我为一个模型定义了两个不同的 HyperlinkedModelSerializer:
class Foo(models.Model):
...
class FooSerializer1(serializers.HyperlinkedModelSerializer):
...
class Meta:
model = Foo
fields = ('url', 'id', ...)
lookup_field= 'pk'
# A second view of the same model for another API use-case
class FooSerializer2(serializers.HyperlinkedModelSerializer):
...
class Meta:
model = Foo
fields = ('url', 'id', ...)
lookup_field= 'pk'
FooSerializer1 被一对 GenericViews 在一个 Django 应用程序(即它自己的 urls.py)中使用,FooSerializer2 被 ModelViewSet 在另一个 Django 应用程序中使用。我在 DefaultRouter 中注册了 ModelViewSet 以及其他一些视图集:
urlpatterns = patterns('',
url(r'^$', 'myapp.views.api_root'),
url(r'^foo1/$', views.FooList1.as_view(), name='foo1-list'),
...
)
urlpatterns = format_suffix_patterns(urlpatterns)
...
class FooViewSet2(viewsets.ReadOnlyModelViewSet):
queryset = Foo.objects.all()
serializer_class = FooSerializer2
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
def get_queryset(self):
...
router = routers.DefaultRouter()
...
router.register(r'foo2', views.FooViewSet2)
...
urlpatterns = router.urls
该路由器自动生成的 api 根显示 GenericView 的端点 FooSerializer1 (foo1-list),而不是 foo2/。如果我手动 GET foo2/,结果显示 Foo 根据 FooSerializer2 序列化(这是正确的),但是每个结果的 URL 再次显示 foo1 详细视图。
我尝试在FooViewSet2 中设置get_serializer,但这不起作用。如何获取 api-root 和 FooSerializer2 的结果以显示与 FooViewset2 对应的 URL?
【问题讨论】:
标签: django django-rest-framework