python - Django:将带有相关对象的QuerySet转换为JSON

标签 python django json django-models django-queryset

假设我有两个简单的模型:

class Place(models.Model):
    name = models.CharField(max_length=200)
    address = models.CharField(max_length=200)

class Event(models.Model):
    name = models.CharField(max_length=200)
    date = models.DateField()
    place = models.ForeignKey(Place)

我现在想做的是查询一组具有已解析位置的事件,并将所有内容转换为字典列表,稍后可以将其转换为 JSON。

最终结果应该是这样的:

[{
   "name": "event1",
   "date": "date1",
   "place": {
       "name": "place1",
       "address": "address1",
   },
},{
   "name": "event2",
   "date": "date2",
   "place": {
       "name": "place2",
       "address": "address2",
   },
},]

到目前为止,我用 ValueQuerySet.values() 方法试试运气:

Event.objects.all().select_related("place").values()

但是这不会起作用,因为 .values() 只返回相关对象的 ID 而不是内容。所以我想知道是否有另一种内置方法来进行这种转换,或者我是否必须迭代 QuerySet 对象并自己进行转换。

最佳答案

没有默认的方法来创建你想要的嵌套字典,但你可以选择相关项的值:

# No need for select_related in this case
Event.objects.values('name', 'date', 'place__name', 'place__address')

[{
   "name": "event1",
   "date": "date1",
   "place__name": "place1",
   "place__address": "address1",
},{
   "name": "event2",
   "date": "date2",
   "place__name": "place2",
   "place__address": "address2",
}]

如果绝对必要,您可以在 Python 中进行一些后处理以获得您想要的嵌套字典。

关于python - Django:将带有相关对象的QuerySet转换为JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18146905/

相关文章:

Django 查询 WHERE 1 IN (column1, column2)

javascript - SQL 插入语句在 Javascript 中不起作用

php - jQuery AJAX 请求在页面加载时不起作用,但是它在调试控制台中起作用

python - 函数和 numpy 数组预分配

python - 如何解决无法将表名解析为 python sqlite 查询的问题?

python - Django REST Framework - 根据 URL 进行过滤

iphone - 解析具有从 JSON 消息生成的单个值的 NSArray

python - 给定多个路径模板,如何将它们合并为一个完整的路径模板

python - 将元组的字符串数组转换为输入和输出

python - 将数据库数据从 DEV 移动到 PRODUCTION,最佳实践?