Django: "Object of type 'QuerySet' is not JSON serializable"
Django: "Object of type 'QuerySet' is not JSON serializable"
我有以下数据,我想要传递给JsonResponse。
coin_amount = [Portfolio.objects.filter(user = request.user, coin = key['coin']).values('amount') for key in coin_sell_options] print(list(coin_amount))
然而,这返回一个ValuesQuerySet,它无法进行Json序列化:
[, , ]
这是个问题,因为我需要一个可以进行Json序列化的列表。
所以我需要以某种方式从我的ValuesQuerySet获取这样的列表:
['3.0000000', '0.1000000', '9.0000000']
Django: "Object of type 'QuerySet' is not JSON serializable"问题的出现原因是代码中返回了一个QuerySet对象,而JSON序列化不支持QuerySet对象的直接序列化。解决方法是将QuerySet对象转换为合适的数据类型后再进行序列化操作。
在这个问题的代码中,通过使用filter和values方法从Portfolio模型中获取了一个QuerySet对象。然而,在使用该QuerySet对象进行序列化操作时,会出现上述的错误提示。
为了解决这个问题,需要对代码进行修改。首先,我们需要使用__in查询操作符,将coin_sell_options中的coin值提取出来,然后再使用filter方法进行查询。具体的修改代码如下:
coins = [key['coin'] for key in coin_sell_options] coin_amount = list(Portfolio.objects.filter(user=request.user, coin__in=coins).values_list('amount', flat=True)) coin_amount = [str(x) for x in coin_amount] print(coin_amount)
在修改后的代码中,首先创建了一个coins列表,用于存储coin_sell_options中的coin值。然后,使用filter方法对Portfolio模型进行查询,查询条件为user为当前请求的用户且coin字段的值在coins列表中。接着,使用values_list方法获取amount字段的值,并将其转换为列表。最后,使用列表推导式将coin_amount列表中的每个元素转换为字符串类型,并进行打印输出。
通过以上的修改,我们成功解决了"Django: "Object of type 'QuerySet' is not JSON serializable"问题。现在,我们可以将coin_amount列表进行JSON序列化操作,而不会出现错误提示。