如何在序列化器模块(Django)中组合两个不同的模型?

我想创建一个注册API,其中,我的目标是结合用户模型和个人资料模型,以便通过添加用户名,电子邮件,密码(用户模型字段)以及性别,薪水,公司,和地址(“配置文件模型”字段)。我尝试使用此link的源。但是,我无法在其中发布任何数据。到目前为止,这是我的代码:

views.py:

class RegisterAPIView(APIView):
    def post(self,request,format=None):
        serializer = ProfileSerializer(data=request.data)
        if serializer.is_valid():
             serializer.save()
             return Response("Thank you for registering",status=status.HTTP_201_CREATED)
        return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST)

serializers.py:

from rest_framework import serializers
from users.models import Profile
from django.contrib.auth.models import User

class ProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = Profile
        fields = ['gender','company','salary','address']

class RegisterBSerializer(serializers.ModelSerializer):   #User Model serializer
    profile = ProfileSerializer()

    class Meta:
        model = User
        fields = ['username','email','password']

    def create(self,validated_data):
        profile_data = validated_data.pop('profile')
        password = validated_data.pop('password',None)
        user = User.objects.create(**validated_data)
        if password is not None:
            user.set_password(password)
        user.save() 
        Profile.objects.create(user = user,**profile_data)
        return user

有人能提示我我走错了路吗?

我无法通过DRF添加数据: image

通常,我应该得到一个说明以下内容的正文:

{"username" : "this field is required","email" : "this field is required","password" : "this field is required",(will be hashed using set_password())
"gender" : "this field is required",} etc etc...
pk110987 回答:如何在序列化器模块(Django)中组合两个不同的模型?

您可以通过编写这样的自定义to_representation方法来实现此目的

class RegisterBSerializer(serializers.ModelSerializer):   #User Model serializer
    profile = ProfileSerializer()

    class Meta:
        model = User
        fields = ['username','email','password']

    def to_representation(self,instance):
        data = super().to_representation(instance)
        profile = data.pop('profile',{})
        data.update(profile)
        return data
本文链接:https://www.f2er.com/3167873.html

大家都在问