擅长:python、mysql、java
<p>您可以在userserializer中重写<code>create</code>:</p>
<pre class="lang-python prettyprint-override"><code>class UserSerializer(serializers.ModelSerializer):
# ....
def create(self, validated_data):
user = User.objects.create_user(**validated_data)
return user
</code></pre>
<p>其他解决方案可以重写ViewSet类中的<code>perform_create</code>,也可以在ViewSet类中编写自己的<code>create</code>方法</p>
<pre><code>class UserViewSet(viewsets.ModelViewSet):
def create(self, request, format=None):
# create user here
# do not call seriailzer.save()
</code></pre>
<p><strong>更新:</strong>在@freethebees发表评论后,重写<code>perform_create</code>也可以工作,下面是代码片段:</p>
<pre><code>class UserViewSet(viewsets.ModelViewSet, mixins.CreateModelMixin):
def perform_create(self, serializer):
# use User.objects.create_user to create user
pass
</code></pre>
<p><strong>注意:
这个答案给出了3个解决方案,选择一个你认为更适合你的需求和你的项目生态系统的解决方案</p>
<p><strong>注2</strong>
我个人更喜欢重写<code>UserViewSet</code>(第二个代码片段)中的<code>create</code>,因为在这里您可以简单地返回您的自定义<code>Response</code>(例如在登录后返回用户配置文件)</p>