【问题标题】:Deserializing a model with an additional field反序列化具有附加字段的模型
【发布时间】:2017-05-21 01:51:22
【问题描述】:

我会尽可能直截了当:

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

我发现ModelSerializer 要求模型本身具有该字段,在我的例子中我动态添加它。

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

【问题讨论】:

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


    【解决方案1】:

    这可以通过从额外上下文访问序列化程序中的 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

    【讨论】:

      猜你喜欢
      • 2018-12-09
      • 1970-01-01
      • 2020-06-29
      • 2015-12-04
      • 2011-09-04
      • 2021-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多