【问题标题】:how to troubleshoot DRF router duplicate urls如何对 DRF 路由器重复 url 进行故障排除
【发布时间】:2016-04-28 18:50:03
【问题描述】:

我正在尝试设置一系列 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,\ 模型视图集、模型列表视图集

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/",

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

非常感谢...

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    使用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'

    【讨论】:

    • 好的。 DRF 仍然很困惑。 URL 很好,但它们都运行到模型 API。我还缺少什么?谢谢。
    • 您是否重新启动了服务器?现在应该可以了。
    • 是的。 DRF仍然很困惑。现在,两个链接都很好,但是当您单击链接时,它们会转到同一个 API。
    • 也许你的SchemaSerializer 不起作用,所以两个序列化器的输出是一样的?
    • 是的。它们单独工作,但如果我同时添加两者,DRF 就会变得疯狂。这里的选项是是否获取带有输出的子对象。在某些情况下,我不想用孩子加载整个东西,所以我只想要一个模型名册。在其他情况下,我想要一个包含所有孩子、孙子等的模型......
    猜你喜欢
    • 2023-03-27
    • 2020-10-02
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多