如何解决DRF路由器重复的URL问题

时间:2016-01-22 08:29:51

标签: django django-rest-framework

我正在尝试设置一系列Django Rest Framework URL。

下面是我的Serializer / ViewSet化妆

class ModelSerializer(serializers.HyperlinkedModelSerializer):
    schemas = SchemaSerializer(many=True, read_only=True)
    class Meta:
        model = dbModels
        fields = ('ModelName', 'pk', 'schemas')

class ModelViewSet(viewsets.ModelViewSet):
    queryset = dbModels.objects.all()
    serializer_class = ModelSerializer

class ModelListSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = dbModels
        fields = ('ModelName', 'pk')

class ModelListViewSet(viewsets.ModelViewSet):
    queryset = dbModels.objects.all()
    serializer_class = ModelListSerializer

这是我的路由器列表: 来自datagenerator.serializer导入UserViewSet,\     ModelViewSet,ModelListViewSet

router = routers.DefaultRouter()
router.register(r'models', ModelViewSet)
router.register(r'modellist', ModelListViewSet)

但是,当我运行localhost网络服务器时,DRF前端会显示:

"models": "http://localhost:8000/datamaker/api/modellist/",
"modellist": "http://localhost:8000/datamaker/api/modellist/",

如何阻止这种情况? 我需要模型去模型和模型师去模型。

非常感谢......

1 个答案:

答案 0 :(得分:2)

使用base_name参数:

router.register(r'models', ModelViewSet, base_name='models')
router.register(r'modellist', ModelListViewSet, base_name='modellist')

由于序列化程序共享相同的数据模型,DRF可能会因尝试自动发现url命名模式而陷入困境。因此,在这种情况下,明确设置base_name

会更好