Django Rest Framework序列化器create()未触发

编程入门 行业动态 更新时间:2024-10-27 08:34:45
本文介绍了Django Rest Framework序列化器create()未触发的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我有以下序列化器

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: '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 从上面的代码段开始。

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()未触发

本文发布于:2023-10-10 01:14:28,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1477284.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:序列化   Rest   Django   create   Framework

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!