简体   繁体   English

Django-REST-Framework:ForeignKey实例未传递到validated_data

[英]Django-REST-Framework: ForeignKey instance is not passed to validated_data

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. 我正在尝试创建一个覆盖create方法的实例,并在数据中传递ForeignKey实例,但是该字段未包含在传递给create方法的validated_data How can I pass that to create ?? 我怎样才能通过create

I have this model. 我有这个模特。

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)

And here's my serializer. 这是我的序列化器。

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)

Here's my view. 这是我的看法。

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()

Even though I'm passing User object to serializer it's not included in the validated_data . 即使我将User对象传递给序列化器,也不包含在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 ?? 官方文档建议为User模型创建另一个序列化器并使用它,但是还有其他方法可以不创建该序列化器吗?

You can pass it as additional argument of save method : 您可以将其作为save方法的附加参数传递:

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

From the docs: 从文档:

Any additional keyword arguments will be included in the validated_data argument when .create() or .update() are called. 调用.create()或.update()时,任何其他关键字参数都将包含在validated_data参数中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 将可编辑字段作为 Django-Rest-Framework 串行器的验证数据方法传递 - Passing Editable Fields as validated_data method of Django-Rest-Framework Serializer Django rest框架:嵌套对象未传递给validated_data - Django rest framework: Nested object not passing to validated_data Django Rest Framework PUT视图说validated_data未填充 - Django Rest Framework PUT view saying validated_data is unfilled 使用来自validated_data的kwargs的Django Rest Framework update() - Django Rest Framework update() with kwargs from validated_data Django休息框架反向关系字段数据从validated_data中省略 - Django rest framework reverse relation field data omitted from validated_data Django Rest框架可验证的嵌套序列化器数据从validated_data中丢失 - Django rest framework writeable nested serializer data missing from validated_data Django Rest 框架:在 def create() 方法之外访问验证数据 - Django Rest Framework: Accessing validated_data outside of def create() method Django Rest框架嵌套的序列化程序未在validated_data中返回关系值 - Django Rest framework nested serializer not returning relation values in validated_data Django Rest Framework Serializer 在 is_valid() 调用后弹出了validated_data,导致创建时出现KeyError - Django Rest Framework Serializer popped off the validated_data after is_valid() call, causing KeyError in create django-rest-framework:无法调用`.is_valid()`,因为在实例化序列化器实例时没有传递`data =`关键字参数 - django-rest-framework: Cannot call `.is_valid()` as no `data=` keyword argument was passed when instantiating the serializer instance
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM