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

时间:2018-09-12 14:08:07

标签: python django django-rest-framework

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

我有这个模特。

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模型创建另一个序列化器并使用它,但是还有其他方法可以不创建该序列化器吗?

1 个答案:

答案 0 :(得分:2)

您可以将其作为additional argument of save method传递:

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

从文档中

  

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