协助将列表中的多个对象传递给Django中的Jsonresponse

时间:2017-12-23 19:42:57

标签: python json django

我在Django中有一个代码,其中选择了5个随机数,然后根据这5个数字,从数据库中再进行5次查询。一个这样做我想通过json将所有5个对象从数据库传递给模板。但是我不知道如何继续这个。这就是我现在所拥有的:

class multiplePull(TemplateView):
template_name = 'gacha/multiplePull.html'

def randomStar(self):
    choice = [5,4,3]
    probability = [0.1, 0.2, 0.7]
    star = random.choices(choice, probability)
    return star[0]

def post(self, request):
    multi = []
    characters = []
    for x in range(5):
        star = self.randomStar()
        multi.append(star)

    for star in multi:
        character = Characters.objects.filter(stars=star).order_by('?')[:1]
        for obj in character:
            characters.append(obj)

    return JsonResponse(json.dumps(characters), safe=False)

现在我收到以下错误:

TypeError: Object of type 'QuerySet' is not JSON serializable

我该怎么做才能让它发挥作用?我想我仍然缺少一些东西,但却无法找到解决方案。当我将其作为上下文数据发送时,这种方法很好,但我不知道如何通过Json传递所有5个对象。我将非常感谢你的帮助。

谢谢你。

1 个答案:

答案 0 :(得分:0)

您的代码的问题是,查询集(以及您包含在其中的模型的对象)不能自动序列化为JSON。

你必须找到一种方法来完成这项工作。例如,like DRF uses serializers

如果您认为对于您的用例来说工作太多,您可以通过将QuerySet转换为列表(list(characters)),然后将其中的每个元素转换为包含您希望包含在响应中的字段的字典。