程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了将 request.data 映射到 onetoone 字段大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决将 request.data 映射到 onetoone 字段?

开发过程中遇到将 request.data 映射到 onetoone 字段的问题如何解决?下面主要结合日常开发的经验,给出你关于将 request.data 映射到 onetoone 字段的解决方法建议,希望对你解决将 request.data 映射到 onetoone 字段有所启发或帮助;

我有一个 JsON 请求数据,如下所示,我想使用 Django 序列化程序和视图来处理它,以便使用 POST 请求在数据库中创建记录。

{
    "username":"user1","first_name":"name1","email":"name1@gmail.com","phone": "123456","app_ID": "435673339303abc"

}

以下是我的 Django 数据库模型和序列化程序,其中创建了一个具有 onetoone django 用户模型的自定义用户模型:

@H_80_11@models.py

from django.contrib.auth.models import User
from django.db import models


class Customusermodel(models.Model):
    user = models.OnetoOneFIEld(User,on_delete=models.CASCADE)
    phone = models.CharFIEld(max_length=20,blank=TruE)
    app_ID = models.CharFIEld(max_length=20,blank=TruE)

serializers.py

class Userserializer(serializers.Modelserializer):
    class Meta:
        model = User
        fIElds = ('username','first_name','email')


class CustomUserserializer(serializers.Modelserializer):
    user = Userserializer(required=TruE)

    class Meta:
        model = Customusermodel
        fIElds = ('user','phone','app_ID')

    def create(self,valIDated_data):
        user_data = valIDated_data.pop('user')
        user = Userserializer.create(Userserializer(),valIDated_data=user_data)
        customuser,created = Customusermodel.objects.update_or_create(user=user,defaults={
            'phone': valIDated_data.pop('phone'),'app_ID': valIDated_data.pop('app_ID')})
        return customuser

vIEws.py

class usersAPI(generics.ListAPIVIEw):
    serializer_class = CustomUserserializer

    def get_queryset(self):
        queryset = Customusermodel.objects.all()
        return queryset

    def post(self,request,format=NonE):
        serializer = CustomUserserializer(data=request.data)
        if serializer.is_valID(raise_exception=ValueError):
            serializer.create(valIDated_data=request.data)
            return Response(serializer.data,status=status.http_201_CREATED)
        return Response(serializer.error_messages,status=status.http_400_BAD_requEST)

但是使用这个序列化器和视图,我必须将嵌套的 Json 数据传递给我不想要的用户对象,如下所示。

{
    "user":
    {
    "username":"user1","email":"name1@gmail.com"
    },"app_ID": "435673339303abc"
}

解决方法

您可以从视图中的 CustomUserModel 获取行。 CustomUserModel.objects.get(user=request.user.user_id)

,

经过多次迭代,我找到了一种方法,将请求数据映射到字典中。 views.py

class usersApi(generics.ListAPIView):
    serializer_class = CustomUserserializer

    def get_queryset(self):
        queryset = CustomUserModel.objects.all()
        return queryset

    def post(self,request,format=NonE):
        username = request.data['username']
        first_name = request.data['first_name']
        email = request.data['email']
        phone = request.data['phone']
        app_id = request.data['app_id']

        user_data = {'user': {'username': username,'first_name': first_name,'email': email},'phone': phone,'app_id': app_iD}
        serializer = CustomUserserializer(data=user_data)

        if serializer.is_valid(raise_exception=ValueError):
            serializer.create(validated_data=user_data)
            return Response(serializer.data,status=status.http_201_CREATED)
        return Response(serializer.error_messages,status=status.http_400_BAD_requEST)

大佬总结

以上是大佬教程为你收集整理的将 request.data 映射到 onetoone 字段全部内容,希望文章能够帮你解决将 request.data 映射到 onetoone 字段所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。