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)
.
假设我有 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)
.