使用附加字段反序列化模型

时间:2017-05-20 16:29:54

标签: django rest django-rest-framework django-orm django-serializer

我会尽可能地直截了当:

我有一个Challenge模型,其中包含有关某个挑战的信息以及它给出的分数。对于给定的挑战,任何User都可以有多个Submissions。 在查询特定Challenge时,我想返回带有挑战信息的JSON以及当前request.user得分的最高分数。有没有办法以某种方式将值类型化(附加)到模型实例并使用给定的Serializer类序列化它?

我发现ModelSerializer要求模型自己拥有该字段,在我的情况下我会动态添加它。

解决这个问题的方法是什么,有没有人有类似的问题?

1 个答案:

答案 0 :(得分:0)

这可以通过从额外的上下文访问序列化程序中的request.user来完成。

在通用视图中,模型序列化程序具有额外的上下文。该上下文具有请求对象。

您可以在Challenge序列化程序

上定义方法字段
class ChallengeSerializer(serializers.ModelSerializer):
    user_max_score = serializers.SerializerMethodField()

    class Meta:
        model = Challenge
        fields = '__all__'

    def get_user_max_score(self, obj):
        user_max_score = 0
        request = self.context.get('request', None)
        if request:
            user = request.user
            # get the user's max score
            ...
        return user_max_score

如果您不使用通用视图,也可以提供额外的上下文。在此处阅读更多内容:http://www.django-rest-framework.org/api-guide/serializers/#including-extra-context