Django Rest Framework序列化器create()未触发 [英] Django Rest Framework serializer create() doesn't get triggered
问题描述
我有以下序列化器
class MyModelSerializer(serializers.ModelSerializer):
user = UserSerializer()
def create(self, validated_data):
print("TEST")
MyModel, created = MyModel.objects.get_or_create(**validated_data)
return MyModel
class Meta:
model = MyModel
fields = ('pk', 'title', 'user', 'movie', 'timestamp', 'text',)
以及以下视图集:
class MyModelViewSet(viewsets.ModelViewSet):
queryset = MyModel.objects.all()
serializer_class = MyModelSerializer
当我向与指定视图集相对应的端点发出 POST
请求时, create( )
方法完全没有作用。如您所见,我尝试在控制台 TEST
中打印出来,但什么也没做。
When I make an POST
request to the endpoint corresponding to specified viewset, the create()
method does absolutely nothing. I tried to print out in console TEST
as you can see, but nothing.
有人对吗?
感谢advace!
编辑:
API调用:
API call:
return axios({
method: 'post',
url: 'http://localhost:8000/api/mymodel/',
data: {
title: this.title,
movie: this.id,
text: this.text,
user: this.user
}
推荐答案
在ViewSet中执行POST处理,您可以找到以下内容:
If you look at the implementation of POST handling in a ViewSet, you can find this :
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
您的 create
方法是在序列化程序验证数据之后调用。
Your create
method is called after serializer validates the data.
您看到的错误(用户已经存在)是调用 serializer.is_valid $ c $的结果c>从上面的代码段开始。
The error you see (user already exists) is a result of calling serializer.is_valid
from the snippet above.
因此,它永远不会调用您的 create
。上面的代码段中,您的craee将被称为 self.perform_create()
的一部分。
Therefore, it never gets to call your create
. Your craete would be called as part of self.perform_create()
from this snippet above.
因此,这意味着您正在尝试创建一个已经存在的用户。因此,在您的模型中,您具有唯一的用户名。
So this means that you are trying to create a user which already exists. So in your model you have unique username.
这篇关于Django Rest Framework序列化器create()未触发的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!