完整错误是:
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()
}
)
序列化程序类也以类似的方式动态创建,并递归地生成适当的类,包括通用更新功能。
可能导致这种情况的原因是什么?永远不会达到我的更新方法。
答案 0 :(得分:0)
在Django REST框架讨论组中回答了这个问题:https://groups.google.com/forum/?fromgroups=#!topic/django-rest-framework/ZT23AsnPzUU
问题是继承时类/ mixins的顺序错误。因此,它必须是(DefaultUpdateBehaviour,serializers.ModelSerializer)而不是(serializers.ModelSerializer,DefaultUpdateBehaviour),以便覆盖ModelSerializer中的更新方法。