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

标签 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,\
模型 View 集、模型 ListView 集
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/",

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

非常感谢...

最佳答案

使用 base_name 争论:

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

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

如果您使用较新版本的 Django Rest Framework,则需要使用 basename='models'而不是 base_name='model' .

关于django - 如何解决 DRF 路由器重复的 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34942156/

相关文章:

python - celery 周期性任务不执行

python - "sudo pip install Django"=> 须藤 : pip: command not found

python - AbstractUser 模型的 django 1.8.5 迁移失败

django-rest-framework - 如何在 Django Rest Framework 中按时间限制 api 请求?

python - django-elasticsearch-dsl-drf:TypeError:search()得到了意外的关键字参数 'doc_type'

mysql - 将 Django 项目连接到远程 Mysql 数据库

python - django urls 在浏览器中抛出错误

ssl - 无法激活与 Django 和 Nginx 的 HTTPS 链接

python - 对于这种(虚拟表的)API,我应该规范化我的模型还是使用大表?

django - 在 Django Rest Framework 中保存序列化程序时将 None 传递给外键