4

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

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 对象并自己进行转换。

4

2 回答 2

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 中进行一些后处理来获得您想要的嵌套字典。

于 2013-08-09T12:52:39.807 回答
2

有一个相关的方法叫做model_to_dict

from django.forms.models import model_to_dict
model_to_dict(instance, fields=[], exclude=[])

但它不会从相关模型创建 dict 字段。

以下是您可以使用的片段:

希望有帮助。

于 2013-08-09T13:05:02.430 回答