我会尽可能地直截了当:
我有一个Challenge
模型,其中包含有关某个挑战的信息以及它给出的分数。对于给定的挑战,任何User
都可以有多个Submissions
。
在查询特定Challenge
时,我想返回带有挑战信息的JSON以及当前request.user
得分的最高分数。有没有办法以某种方式将值类型化(附加)到模型实例并使用给定的Serializer类序列化它?
我发现ModelSerializer
要求模型自己拥有该字段,在我的情况下我会动态添加它。
解决这个问题的方法是什么,有没有人有类似的问题?
答案 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