【问题标题】:"Write an explicit `.update()` method for serializer" error but update method present“为序列化程序编写显式 `.update()` 方法”错误但存在更新方法
【发布时间】:2016-12-28 08:33:23
【问题描述】:

完整的错误是:

The `.update()` method does not support writable nestedfields by default.
Write an explicit `.update()` method for serializer `rest_framework.serializers.BankOutEntrySerializer2`, or set `read_only=True` on nested serializer fields.

ModelViewSet 和 ModelSerializer 中都存在更新方法。两者都通过 mixin 继承了这个功能。我正在使用type 动态生成这些类。

看起来像这样:

ViewSet = type(
    Model.__name__+"ViewSet",
    (viewsets.ModelViewSet, DefaultViewSetBehaviour),
    {
        'serializer_class': Serializer,
        'queryset': Model.objects.all()
    }
)

序列化程序类也以类似的方式动态创建,并递归生成适当的类,包括通用更新功能。

这可能是什么原因造成的?永远无法达到我的更新方法。

【问题讨论】:

    标签: django-rest-framework


    【解决方案1】:

    这已在 Django REST 框架讨论组中得到解答:https://groups.google.com/forum/?fromgroups=#!topic/django-rest-framework/ZT23AsnPzUU

    问题是继承时类/mixin 的顺序错误。因此,而不是 (serializers.ModelSerializer, DefaultUpdateBehaviour) 它需要是 (DefaultUpdateBehaviour, serializers.ModelSerializer) 以便覆盖 ModelSerializer 中的更新方法。

    【讨论】:

      猜你喜欢
      • 2020-10-31
      • 2019-11-16
      • 1970-01-01
      • 2021-07-09
      • 2021-10-09
      • 2020-03-05
      • 1970-01-01
      • 2018-06-21
      • 1970-01-01
      相关资源
      最近更新 更多