【问题标题】:Django-REST-Framework: ForeignKey instance is not passed to validated_dataDjango-REST-Framework:ForeignKey 实例未传递给 valid_data
【发布时间】:2018-09-12 14:08:07
【问题描述】:

我正在尝试创建一个覆盖create 方法的实例并在数据中传递ForeignKey 实例,但该字段不包含在传递给create 方法的validated_data 中。我怎样才能将它传递给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 模型创建另一个序列化程序并使用它,但是没有创建该序列化程序还有其他方法吗??

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案1】:

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

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

    来自文档:

    任何额外的关键字参数都将包含在 调用 .create() 或 .update() 时的验证数据参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-24
      • 2011-08-21
      • 2021-10-26
      • 2023-01-16
      • 1970-01-01
      • 2020-11-04
      • 2012-03-09
      • 2015-03-05
      相关资源
      最近更新 更多