gpt4 book ai didi

Django-Rest-Framework,使用 HyperlinkedModelSerializer 时通过 ID 更新外键

转载 作者:行者123 更新时间:2023-12-04 21:42:55 26 4
gpt4 key购买 nike

这个问题是基于Django-Rest-Framework updating a foreign key BY Id导出的.

我有一个有点类似的问题。我爱 HyperlinkedModelSerializer .我可以从我的网络浏览器(例如 Chrome、FF 等)浏览 API 的所有链接,但是当我尝试使用 API 时,我在客户端应用程序中有很多工作要做。我对 GET 没有任何问题要求。在 POST使用 ForeignKey 更新模型时请求,我需要在向服务器发出 POST 请求之前从客户端应用程序(例如 AngularJS、Android 等)构造 URL。我知道 ModelSerializer这解决了客户端应用程序的问题,但无法从 Web 浏览器导航。

我不确定设计可浏览 REST API 的好方法是什么。我不确定大多数人是如何解决这个问题的,当他们想要创建一个可浏览的 REST API 时,同时,他们不想通过在制作之前解析 URL-ID 来增加客户端应用程序的复杂性POST要求。或者这可能只是我没有 body 遇到的问题。

为什么不HyperlinkedModelSerializer改为执行以下操作。

  • GET 上返回 URL 中的所有外键要求。这样开发人员就可以从他们的 Web 浏览器导航 API。
  • 接受 ID POST要求。这样开发人员就可以只传递 ID,而不必从客户端应用程序构建完整的 URL。

  • 示例:
    c = Client()

    data = {
    'user': '1',
    'industry': '1'
    }

    c.post('http://localhost:8000/favorite_industries/', json.dumps(data), 'application/json')

    response = c.get('http://localhost:8000/favorite_industries/')
    print(response.content)
    # [{"id": 1, "user": "http://localhost:8000/users/1/", "industry": "http://localhost:8000/industries/1/"}]

    问题 :
  • HyperlinkedModelSerializer 当前设计的优势是什么? ?
  • 我的建议有什么缺点?
  • 怎么做到呢?
  • 最佳答案

    我认为根本不需要构建 URL。当您发送外键时,您基本上是在引用另一个对象。这个另一个对象你应该已经知道它的标识符。在您的示例中,用户 ID 为 1。如果您围绕 HyperlinkedModelSerializer 构建 API ,用户对象将带有自己的标识符:url。在创建您的 favorite_industries 之前对象,您需要知道与哪个用户关联。在正常情况下,您将拥有包含其 url 的用户对象:

    {
    "url" : "http://localhost:8000/users/1",
    "name": "Yeo"
    }

    您需要做的就是将此标识符作为外键发送:
    data = {
    'user': 'http://localhost:8000/users/1',
    'industry': 'http://localhost:8000/industries/1'
    }

    我说在正常情况下,因为通常在您的客户端应用程序中,用户不会输入 ID,但会显示名称等其他信息供用户选择哪些要求具有完整的用户对象,包括其 url。

    关于Django-Rest-Framework,使用 HyperlinkedModelSerializer 时通过 ID 更新外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21965074/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com