首页 > 解决方案 > 如何在 Django REST API 的序列化程序中使用 2 个模型?

问题描述

我最近才开始使用 Django Rest Framework,想知道如何在单个序列化程序中使用 2 个模型。我有一个名为“配置文件”的自定义模型,并且还使用了默认的 Django 模型“用户”。对于这两个表,我计划使用嵌套表示。最后,为了测试 RegisterAPI,我想使用 POSTMAN 工具创建数据,但目前它没有按预期工作。

这是我到目前为止所做的:

模型.py:

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete = models.CASCADE)
    company = models.CharField(max_length=100, blank=True, null=True)
    address = models.TextField()

视图.py:

class RegisterAPI(APIView):

    permission_classes = [AllowAny]
    def post(self, request, format=None):
        serializer = UserSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            content = {
            'result': 'Thanks for registering!'
            }
            return Response(content, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

序列化程序.py:

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

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

class UserSerializer(serializers.ModelSerializer):
    profile = ProfileSerializer(many = True)

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


    def create(self, validated_data):
        profile_data = validated_data.pop('profile')
        password = validated_data.pop('password', None)  
        # instance = self.Meta.model(**validated_data)
        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

在 POSTMAN 中,我无法为 Profile 序列化程序设置“公司”和“地址”字段。我怎样才能做到这一点?

标签: djangopython-3.x

解决方案


推荐阅读