<p>您的<code>BulkWidgetSerializer</code>由<code>ListSerializer</code>包装,这是DRF的默认行为。这就是为什么你的新方法不见了。在</p>
<p>如果用kwarg <code>many=True</code><a href="https://github.com/encode/django-rest-framework/blob/master/rest_framework/serializers.py#L124" rel="nofollow noreferrer">the library wraps it</a>实例化{<cd3>}的任何子类,并将<code>child</code>设置为您的<code>Serializer</code>类。在</p>
<p>因此,您无法重写<code>save()</code>方法以获得所需的效果。
尝试重写序列化程序的<code>many_init</code>classmethod,以提供实现所需行为的自定义<code>ListSerializer</code>,它<a href="http://www.django-rest-framework.org/api-guide/serializers/#customizing-listserializer-initialization" rel="nofollow noreferrer">as shown in DRF documentation</a>。在</p>
<p>其次,最好重写<code>create()</code>或{<cd12>}方法,而不是调用其中一个的<code>save()</code>。在</p>
<p>您的实现可能是这样的:</p>
<pre><code>class CustomListSerializer(serializers.ListSerializer):
def create(self, validated_data):
more_business_logic()
instances = [
Widget(**attrs) for attrs in validated_data
]
return Widget.objects.bulk_create(instances)
</code></pre>
<p>然后在<code>BulkWidgetSerializer</code>中:</p>
^{pr2}$
<p>一个问题:如果您在重写方法期间依赖于子类中的任何一个来支持批量部分更新(例如<code>validate()</code>),请不要忘记将正确的kwarg从父类传递给子类。在</p>