Django Rest Framework SerializerMethodField 传递额外参数

10 投票
1 回答
6671 浏览
提问于 2025-04-18 13:43

我有一个模型方法,需要把请求的用户作为额外的参数传入:

模型方法:

def has_achieved(self, user):
    return AwardLog.objects.filter(user=user, badge=self).count() > 0

我在使用Django Rest Framework时,想要调用这个put方法,但不知道怎么从序列化器中传入这个额外的参数:

class BadgeSerializer(serializers.ModelSerializer):

    achieved = serializers.SerializerMethodField(source='has_achieved(request.user???)')

    class Meta:
       model = Badge
       fields = ("name", "achieved")

我找不到任何地方有记录这种情况。有没有什么方法可以在我的视图中重写,以便传入这个参数并使用呢?谢谢。

1 个回答

20

为了跟进一下,我是通过使用 self.context['request'].user 来实现的,也就是这样。

def has_achieved(self, obj):

    return obj.has_achieved(self.context['request'].user)

撰写回答