Django-REST-Framework:ForeignKey实例未传递到validated_data [英] Django-REST-Framework: ForeignKey instance is not passed to validated_data

查看:47
本文介绍了Django-REST-Framework:ForeignKey实例未传递到validated_data的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试创建一个覆盖 create 方法的实例,并在数据中传递 ForeignKey 实例,但是该字段未包含在 validated_data 传递给 create 方法.如何将其传递给 create ??

I'm trying to create an instance overriding create method and passing the ForeignKey instance in the data, but that field is not included in validated_data passed to create method. How can I pass that to create ??

我有这个模特.

class UserProfile(models.Model):
    name = models.CharField(verbose_name='Name', max_length=50)
    email = models.EmailField(verbose_name='Email')
    address = models.TextField(verbose_name='Address', null=True, blank=True)
    user = models.OneToOneField(User, verbose_name='User', on_delete=models.CASCADE)

这是我的序列化器.

class UserProfileSerializer(ModelSerializer):
    class Meta:
        model = UserProfile
        fields = '__all__'
        depth = 2

    def create(self, validated_data):
        print(validated_data)
        return UserProfile.objects.create(**validated_data)

这是我的观点.

class UserRegisterView(APIView):
    def post(self, request, format=None, *args, **kwargs):
        name = request.data.get('name')
        email = request.data.get('email')
        password = request.data.get('password')
        address = request.data.get('address')

        if name and email and password:
            user = User.objects.create_user(username=email, password=password, email=email)

            request.data['user'] = user
            serializer = UserProfileSerializer(data=request.data)
            if serializer.is_valid():
                user_profile = serializer.save()

即使我将 User 对象传递给序列化器,它也没有包含在 validated_data 中.官方文档建议为 User 模型创建另一个序列化器并使用它,但是还有其他方法可以不创建该序列化器吗?

Even though I'm passing User object to serializer it's not included in the validated_data. Official doc suggests to create another serializer for User model and use that, but is there any other way without creating that serializer ??

推荐答案

您可以将其作为保存方法的附加参数:

serializer = UserProfileSerializer(data=request.data)
if serializer.is_valid():
    user_profile = serializer.save(user=user)

从文档中

任何其他关键字参数都将包含在调用.create()或.update()时validated_data参数.

Any additional keyword arguments will be included in the validated_data argument when .create() or .update() are called.

这篇关于Django-REST-Framework:ForeignKey实例未传递到validated_data的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆