我想澄清Django-rest-framework关于创建模型对象的给定文档。到目前为止,我发现有三种处理这种事件的方法。
序列化器的
create()
方法。这里是文档
class CommentSerializer(serializers.Serializer):
def create(self, validated_data):
return Comment.objects.create(**validated_data)
ModelViewset的 create()
方法。 文档class AccountViewSet(viewsets.ModelViewSet):
queryset = Account.objects.all()
serializer_class = AccountSerializer
permission_classes = [IsAccountAdminOrReadOnly]
ModelViewset perform_create()
方法。文档
class SnippetViewSet(viewsets.ModelViewSet):
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
这三种方法在您的应用环境中都很重要。但是什么时候需要使用每个 create() / perform_create()
函数呢?另一方面,我发现有些帐户为单个post请求调用了两个create方法,即ModelViewSet
的create()
和序列化程序的create()
。
create(self, validated_data)
,它是指它专注于数据验证逻辑吗?而且它还能帮助将给定序列化器的数据返回到响应中,对吗? - Shift 'n Tabreturn models.YourModel.objects.create(email=email, **validated_data)
会保存数据到数据库中对吗? - Shift 'n Tabcreate
函数仅在执行serializer.save()
时才会被调用。在AccountViewSet
中的create(self, request)
函数中,您根本没有调用serializer.save()
,因此唯一的实例创建是通过此调用进行的:Account.objects.create_user(**serializer.validated_data)
。 - Apoorv Kansal