django-rest-framework:如何更新嵌套的外键?我的更新方法甚至没有被调用

Posted

技术标签:

【中文标题】django-rest-framework:如何更新嵌套的外键?我的更新方法甚至没有被调用【英文标题】:django-rest-framework: how do I update a nested foreign key? My update method is not even called 【发布时间】:2022-01-22 02:43:18 【问题描述】:

我有这样的东西(我只包括了相关部分):

class ImageSerializer(serializers.ModelSerializer):
  telescopes = TelescopeSerializer(many=True)

  def update(self, instance, validated_data):
    # In this method I would perform the update of the telescopes if needed.
    # The following line is not executed.
    return super().update(instance, validated_data)

  class Meta:
    model = Image
    fields = ('title', 'telescopes',)

当我执行GET 时,我会得到我想要的嵌套数据,例如:


  'title': 'Some image',
  'telescopes': [
    'id': 1,
    'name': 'Foo'
  ]

现在,如果我想通过更改名称而不是望远镜来更新此图像,我会PUT 如下:


  'title': 'A new title',
  'telescopes': [
    'id': 1,
    'name': 'Foo'
  ]

似乎django-rest-framework 甚至没有调用我的update 方法,因为模型验证失败(Telescope.name 有一个unique 约束),而django-rest-framework 正在验证它,就好像它想创建它一样?

当我不使用嵌套序列化程序时,一切正常,而只是使用 PrimaryKeyRelatedField,但出于性能原因(以避免过多的 API 调用),我确实需要嵌套序列化程序。

有人知道我错过了什么吗?

谢谢!

【问题讨论】:

【参考方案1】:

您将在此处找到您的解决方案 Django rest relations

【讨论】:

以上是关于django-rest-framework:如何更新嵌套的外键?我的更新方法甚至没有被调用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django-rest-framework 中为 API 使用 TokenAuthentication

django-rest-framework - 在可浏览的 API 中自动生成表单?

如何使用 django-rest-framework 进行社交登录? [关闭]

如何在 django-rest-framework 中对权限进行单元测试?

django-rest-framework:如何更新嵌套的外键?我的更新方法甚至没有被调用

如何仅使用 django 作为后端并使用 django-rest-framework 发布