Django中如何把queryset转换成字典

在 Django 中,可以使用多种方法将 QuerySet 转换为字典(dict),主要方式如下:



1. 使用 .values() 方法

Django 提供了 .values() 方法,它会返回一个 QuerySet,但每个对象是一个字典。

示例

from myapp.models import MyModel

queryset = MyModel.objects.all().values()  # 获取所有字段
data = list(queryset)  # 转换为列表,每个元素是一个字典

示例结果

[
    {"id": 1, "name": "Alice", "age": 25},
    {"id": 2, "name": "Bob", "age": 30}
]

📌 特点

  • 只返回字段数据,不包含模型方法或自定义属性。
  • QuerySet 本质上是 ValuesQuerySet,所以 list(queryset) 直接转成字典列表。


2. 使用 .values_list() 方法

如果只需要特定字段,可以用 .values_list() 并手动转换:

queryset = MyModel.objects.all().values_list("id", "name")
data = [dict(zip(["id", "name"], item)) for item in queryset]

示例结果

[
    {"id": 1, "name": "Alice"},
    {"id": 2, "name": "Bob"}
]

📌 适用于

  • 只需要部分字段,提高查询效率。


3. 使用 .model_to_dict()

Django 提供了 model_to_dict() 方法,适用于单个模型实例:

from django.forms.models import model_to_dict

queryset = MyModel.objects.all()
data = [model_to_dict(instance) for instance in queryset]

示例结果

[
    {"id": 1, "name": "Alice", "age": 25},
    {"id": 2, "name": "Bob", "age": 30}
]

📌 适用于

  • 需要包含 ForeignKey 关联对象时。


4. 使用 serializers.serialize()(JSON 形式)

Django 自带 serializers 可以把 QuerySet 转换成 JSON:

from django.core.serializers import serialize
import json

queryset = MyModel.objects.all()
json_data = serialize("json", queryset)  # 序列化成 JSON 字符串
data = json.loads(json_data)  # 转换成 Python 字典

示例结果

[
    {"model": "myapp.mymodel", "pk": 1, "fields": {"name": "Alice", "age": 25}},
    {"model": "myapp.mymodel", "pk": 2, "fields": {"name": "Bob", "age": 30}}
]

📌 适用于

  • 需要 JSON 兼容格式,或者导出 API 数据。


总结

方法适用场景返回格式
.values()需要字典格式的数据list[dict]
.values_list()只获取特定字段list[dict]
model_to_dict()适用于单个对象(包含 ForeignKeylist[dict]
serializers.serialize()需要 JSON 结构list[dict](含 model & fields

如果你只是想获取 QuerySet 的数据,大多数情况下 .values() 是最简单高效的方式! 🚀


文章标签:

评论(0)