【发布时间】:2022-02-05 21:35:31
【问题描述】:
我正在为一个游戏创建一个 API,用户可以在其中获得标记图像的积分。如果用户用与另一个标签相同的标签标记了图像,则分数会更新 5 分(如果该玩家是他们的对手,则更新 25 分)。我已将序列化程序中的字段分数声明为 SerializerMethodField。
在 get_score 方法中,我试图访问 tags_to_compare 列表中的 tag__name 字段,然后简单地提取字符串并将它们存储在一个列表中。
我在我的序列化程序中尝试了以下内容:
更新 我已将我的 get_score 方法更新如下:
serializers.py
score = serializers.SerializerMethodField('get_score')
...
def get_score(self, tagging):
score = 0
resource_id = tagging.resource.id
# A previously played gameround for this resource is coordinated for Tag verification
coordinated_gameround = Gameround.objects.all().filter(taggings__resource_id=resource_id).order_by("?").first()
# list of tag_name from coordinated gameround
coordinated_gameround_tags = coordinated_gameround.taggings.all().values_list("tag__name", flat=True)
if Tag.objects.all().filter(name=tagging) in coordinated_gameround_tags:
score += 25
return score
我测试了以下行,它检索了一个标记列表。
coordinated_gameround_tags = coordinated_gameround.taggings.all().values_list("tag__name", flat=True)
这是标签列表所在的 JSON 对象:
{
"gameround": {
"id": 2014305513,
"user": {
"id": 1,
"username": "carina",
"is_superuser": true
},
"score": 50,
"tags_to_compare": [
{
"tag_id": 153,
"tag__name": "night",
"tag__language": "en",
"resource_id": 323570
},
{
"tag_id": 10437,
"tag__name": "dress",
"tag__language": "en",
"resource_id": 323570
},
{
"tag_id": 9598,
"tag__name": "sleep",
"tag__language": "en",
"resource_id": 323570
}
]
}
}
【问题讨论】:
标签: json django-rest-framework django-serializer