Python Django-Rest-Framework 更新用户数据创建

Python Django-Rest-Framework update user on data creation

假设我有 2 个模型,一个用户,另一个 Post。一个用户可以创建 posts。用户有一个名为 'exp_pts' 的字段作为 IntegerField。这意味着当用户创建 post.

时增加 30

我假设我必须在 PostSerializer 中使用 create() 方法。这是我当前用于 Posts 的序列化程序(由于 create() 方法未按预期工作,目前无法正常工作)

class PostSerializer(serializers.ModelSerializer):

    class Meta:
        model = Post
        fields = ('id', 'user', 'kingdom', 'post_type', 'file_path',
                  'title', 'description', 'created_at', 'updated_at')

    def to_representation(self, instance):
        data = super().to_representation(instance)
        data['user'] = SimpleUserSerializer(
            User.objects.get(pk=data['user'])).data
        data['kingdom'] = KingdomSerializer(
            Kingdom.objects.get(pk=data['kingdom'])).data
        return data

    # This is not yet working
    def create(self, validated_data):
        user = validated_data.pop('user')
        user.exp_pts += 30
        user.save()
        return user

有什么方法可以做到以上几点?如果 create() 方法不够用,那么还有什么其他方法可以实现呢?非常感谢任何帮助。谢谢。

你的create方法是错误的。应该更像:

def create(self, validated_data):
        user = validated_data.pop('user')
        user.exp_pts += 30
        user.save()

        return super().create(validated_data)

您的序列化程序的 create 方法必须 return 已创建 Post 的实例,而不是 User。由于实际创建可以由DRF自己处理,所以return super().create(validated_data).