假设我有两个简单的模型:
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的dicts列表。
这是最终结果的样子:
[{
"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对象并自己进行转换。
答案 0 :(得分:2)
没有默认方法可以创建您所使用的嵌套词组,但您可以选择相关项的值:
# 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中进行一些后处理以获得所需的嵌套字符串。
答案 1 :(得分:2)
有一种称为model_to_dict
的相关方法:
from django.forms.models import model_to_dict
model_to_dict(instance, fields=[], exclude=[])
但它不会从相关模型创建dict字段。
以下是您可以使用的代码段:
希望有所帮助。