"为序列化器编写一个明确的`.update()`方法"错误但更新方法存在

时间:2016-08-21 20:26:04

标签: django-rest-framework

完整错误是:

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()
    }
)

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

可能导致这种情况的原因是什么?永远不会达到我的更新方法。

1 个答案:

答案 0 :(得分:0)

在Django REST框架讨论组中回答了这个问题:https://groups.google.com/forum/?fromgroups=#!topic/django-rest-framework/ZT23AsnPzUU

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