如何解决 DRF 路由器重复的 url

arc*_*123 4 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
Run Code Online (Sandbox Code Playgroud)

这是我的路由器列表: from datagenerator.serializer import UserViewSet, \ ModelViewSet, ModelListViewSet

router = routers.DefaultRouter()
router.register(r'models', ModelViewSet)
router.register(r'modellist', ModelListViewSet)
Run Code Online (Sandbox Code Playgroud)

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

"models": "http://localhost:8000/datamaker/api/modellist/",
"modellist": "http://localhost:8000/datamaker/api/modellist/",
Run Code Online (Sandbox Code Playgroud)

我该如何阻止?我需要模型去模型和模型列表去模型列表。

非常感谢...

Ale*_*zov 6

使用base_name参数:

router.register(r'models', ModelViewSet, base_name='models')
router.register(r'modellist', ModelListViewSet, base_name='modellist')
Run Code Online (Sandbox Code Playgroud)

由于您的序列化程序共享相同的数据模型,因此 DRF 可能会在尝试自动发现 url 命名模式时卡住。所以在这种情况下最好显式设置base_name.

如果你使用Django的REST框架的新版本,你需要使用basename='models'代替base_name='model'