django - QuerySet 类型的对象不是 JSON 可序列化的

标签 django

我有这些可以按名称调用的列表对象。它们具有用户可以输入的数值。我如何将这些列表中的每一个转换为图表 js 可以呈现的形式?我试过这个:Django Queryset to dict for use in json但无法让它工作。获取“QuerySet 类型的对象不是 JSON 可序列化的”。 Chart js 需要为每个列表都有自己的行,并在这些行中显示值。这是我在 views 中链接的结果:

首先我得到所有的用户列表:

user_lists = List.objects.filter(user=user)

然后我得到每个列表的数值

list_data = {}
for list in user_lists:
    list_data[list.name] = DataItem.objects.filter(list=list)

当我应该将这些列表转换成 chart.js 可以理解的东西时,我就卡住了。

list_data_json = json.dumps(list_data, cls=DjangoJSONEncoder)

顺便说一句,我是否在正确的轨道上将这种转化转化为浏览量,对吧?还是属于其他地方?

不知道是否需要这些,但这里有这些列表及其中的数据项的模型:

class List(models.Model):
    name = models.CharField(max_length=100, default="")
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='lists')

def __str__(self):
    return self.name

class Meta:
    unique_together = ['name', 'user']


class DataItem(models.Model):
    data = models.IntegerField(default=0)
    list = models.ForeignKey(List, on_delete=models.CASCADE, related_name='data_items')

编辑 输出查询集看起来像这样(我想这就是 json.dumps 试图读取的内容):

<QuerySet [{'name': 'squat', 'data_items__data': 1}, {'name': 'deadlift', 'data_items__data': 55}, {'name': 'Chest', 'data_items__data': None}, {'name': 'asd', 'data_items__data': 444}, {'name': 'asd', 'data_items__data': 32342}, {'name': 'asd', 'data_items__data': 42342}]>

对我来说这看起来不错,有一个列表列表,列表有一个名称“squats”,然后是值。但是再次出现此错误“‘QuerySet’对象不可调用”

最佳答案

如果您知道要传递给 chart.js 的字段,您可以执行特定的 values() 查询来获取字典,您可以使用 json.dumps 轻松序列化该字典,大致是这样的:

user_lists = (List.objects
    .filter(user=user)
    .select_related('user')
    .prefetch_related('data_items')
    .values('user__username', 'data_items__data')  # all fields you need
)

list_data_json = json.dumps(list(user_lists))

关于django - QuerySet 类型的对象不是 JSON 可序列化的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55160798/

相关文章:

django - apache + django 1.3 内存问题

python - 如何从 Django 模型类获取 content_type?

python - Django 用户模型字段保存在哪里?

python - 使用 python 在 web 上部署 matlab 应用程序

python - Django,阅读源代码和主要文档, "side by side"

django - 使用 apache 编译 mod_wsgi 的问题

django - Django 模型中的数据数组

python - 我想在我的网站上有一个按钮来执行 python 脚本

database - 在关系型数据库中,不鼓励将同一条数据保存在两个地方吗?

python - 从其他列计算列 django-tables2