API 响应显示带有 PUT/PATCH 请求的过时数据

2023-12-05

我正在使用 Django REST 框架开发 API。就我而言,我使用嵌套序列化器 所以我需要覆盖.update method.

这是所需的描述:

序列化器

配置串行器

class DeviceConfigSerializer(serializers.ModelSerializer):
    config = serializers.JSONField()
    context = serializers.JSONField()

    class Meta:
        model = Config
        fields = ['backend', 'status', 'templates', 'context', 'config']

设备详细信息串行器

class DeviceDetailSerializer(serializers.ModelSerializer):
    config = DeviceConfigSerializer()

    class Meta(BaseMeta):
        model = Device
        fields = [
            'id',
            'name',
            'organization',
            'mac_address',
            'key',
            'last_ip',
            'management_ip',
            'model',
            'os',
            'system',
            'notes',
            'config',
        ]

    def update(self, instance, validated_data):
        config_data = None

        if self.data['config'] is None and validated_data.get('config'):
            config_data_ = dict(validated_data.get('config'))
            config_templates = config_data_.pop('templates')
            config = Config.objects.create(device=instance, **config_data_)
            for template in config_templates:
                config.templates.add(template.pk)

        if validated_data.get('config'):
            config_data = validated_data.pop('config')

        # When config data is provided with PATCH requests
        if config_data:
            instance.config.backend = config_data.get(
                'backend', instance.config.backend
            )
            instance.config.status = config_data.get('status', instance.config.status)

            config_templates = config_data.get('templates')
            instance.config.templates.clear()
            for template in config_templates:
                instance.config.templates.add(template.pk)

            instance.config.context = json.loads(
                json.dumps(config_data.get('context')),
                object_pairs_hook=collections.OrderedDict,
            )
            instance.config.config = json.loads(
                json.dumps(config_data.get('config')),
                object_pairs_hook=collections.OrderedDict,
            )
            instance.config.save()

        return super().update(instance, validated_data)

设备详细信息视图

class DeviceDetailView(RetrieveUpdateDestroyAPIView):
    serializer_class = DeviceDetailSerializer
    queryset = Device.objects.all()

现在,当我向其端点发送 PUT/PATCH 请求时,它工作正常并且数据库中的字段得到更新,但由于 PUT/PATCH 请求成功完成后,我应该在响应中返回更新的实例字段,但是就我而言,我需要再次发送 GET 请求/或刷新页面以获取可浏览 API 中的更新数据。 还有什么我需要补充的吗,还是我遗漏了什么?


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

API 响应显示带有 PUT/PATCH 请求的过时数据 的相关文章

随机推荐

  • C++中的简单线程池

    谁能给我提供一个 C 线程池的示例实现吗 我正在寻找一个非常基本的 没有太多复杂性的 适合线程初学者学习的 看看英特尔的线程构建块 我不知道该图书馆在多大程度上符合您的 简单 标准 但它似乎经过深思熟虑和彻底 我认为如果你想在 C 中进行线
  • 重写为 MVC 后 GUI 不工作

    我正在练习 MVC 风格的编程 我在一个文件中有一个 Mastermind 游戏 工作正常 也许除了 检查 按钮在开始时不可见之外 http paste pocoo org show 226726 但是 当我将其重写为模型 视图 控制器文件
  • 如何从 Fragment 中启动活动? [复制]

    这个问题在这里已经有答案了 我有一组选项卡FragmentActivity每个都有自己的片段 当我尝试通过以下方式从该片段中启动新活动时onClickListener 并使用startActivity myIntent 方法 我的应用程序强
  • 使用 id 创建元素?

    我正在尝试修改此代码以也为该 div 项目提供一个 ID 但是我在 google 上没有找到任何内容 并且 idName 不起作用 我读到一些关于append 但是对于看起来很简单的任务来说似乎相当复杂 那么有其他选择吗 谢谢 g docu
  • 我更新了 Android Studio,现在 gradle 项目同步失败

    我更新了 Android Studio 现在出现以下错误 1 Gradle项目同步失败 基本功能 例如编辑 调试 将无法正常工作 2 无法通过代理建立隧道 代理返回 HTTP 1 1 403 请求被 Privoxy 阻止 我在 gradle
  • 当参数是列表时,惰性求值如何工作?

    根据我的理解 惰性求值是指参数在传递给函数之前不求值 而是仅在实际使用它们的值时才求值 但在 haskell 教程中 我看到了一个例子 xs 1 2 3 4 5 6 7 8 doubleMe doubleMe doubleMe xs 作者说
  • WordPress 博客 iPhone 应用程序阅读器 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我有一个 WordPress 博客 有点像当天交易的报价 我希望制作一个简单的 iPhone 应用程序来自动下载博客内容 想想 RSS 类似 我希望我的读者能够保存他们最喜欢的帖子
  • 如何从工作室中排除support v4库?

    失败 构建失败并出现异常 What went wrong Execution failed for task transformClassesWithJarMergingForDebug com android build api tran
  • 如何隐藏 Powershell GUI 上的选项卡?

    好的 我创建了一个 powershell 脚本 我试图使主界面使用选项卡式布局 我获得了我想要的所有功能 除了我想隐藏顶部的选项卡并使用侧面的按钮来切换选项卡 我已经成功地在侧面设置了按钮来选择不同的选项卡 但我不知道如何隐藏顶部的选项卡
  • 解释 SPAN_EXCLUSIVE_EXCLUSIVE 等 Span 标志的含义

    有人可以用例子清楚地解释一下每个跨度标志 like SPAN EXCLUSIVE EXCLUSIVE and SPAN MARK MARK是什么意思以及何时使用什么标志 我不明白官方文档说 类型跨度SPAN EXCLUSIVE EXCLUS
  • 无法在 Fragment 中保留 SupportMapFragment

    我有一个带有导航抽屉的应用程序 其中包含 Google 地图片段和其他一些片段 我正在创建SupportMapFragment以编程方式并将其放入我的自定义中fragment map地图容器中的布局 问题是我必须添加超过2000 标记从数据
  • Java ConcurrentHashMap 和 foreach 循环

    假设我有以下内容ConcurrentHashMap ConcurrentHashMap
  • 检查输入是否等于数组中存在的值?

    我想检查一下是否input等于数组中的任何选项 我该怎么做 我可以在不使用大量的情况下做到这一点吗 运营商 check if any input in herp was entered string input string herp 2
  • 将 localDateTime 字符串正确解析为 spring boot @pathVariable

    我正在尝试获取带有时间戳的用户的所有数据 GetMapping datum userID timeStamp List
  • 从没有 get() 方法的 AsyncTask 返回值

    我试图从 DoInBackground 中的 asynctask 返回值 但调用 get 方法会冻结我的 UI 如何将代码重写为回调方法 public class GetUrlDataTask extends AsyncTask
  • 如何验证时间戳?

    我的应用程序接受这样的字符串 2002 10 15 10 55 01 000000 我需要验证该字符串对于 db2 时间戳是否有效 我怎样才能做到这一点 编辑 这大部分有效 public static boolean isTimeStamp
  • 使用 Polymer 扩展原生 HTML 元素

    您好 我想使用 Polymer 从本机 HTML 元素进行扩展 以创建自定义 Web 组件 当我不延伸时 我的聚合物就绪回调被调用 一旦我延长 就不再有人打电话了 虽然正在创建元素的影子 DOM 这是我的用法代码
  • 使用 JDBC 的 NLS_DATE_FORMAT

    我尝试在jdbc中设置NLS DATE FORMAT 但似乎没有任何效果 我的代码 Connection conn ods getConnection Statement stat conn createStatement stat exe
  • 尝试创建多个 JLabel,但只出现一个

    我正在尝试创建多个相同形式的 JLabel 然后尝试将它们添加到同一个 JPanel 中 然而 只出现了一个 JLabels 我不明白为什么 这是我写的代码 final JPanel labelPanel new JPanel new Bo
  • API 响应显示带有 PUT/PATCH 请求的过时数据

    我正在使用 Django REST 框架开发 API 就我而言 我使用嵌套序列化器 所以我需要覆盖 update method 这是所需的描述 序列化器 配置串行器 class DeviceConfigSerializer serializ