簡體   English   中英

Django:將QuerySet與相關對象轉換為JSON

[英]Django: convert QuerySet with related objects to JSON

假設我有兩個簡單的模型:

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對象並自己進行轉換。

沒有默認的方法來創建您之后的嵌套dicts,但您可以選擇相關項的值:

# 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中進行一些后處理以獲得所需的嵌套字符串。

有一個名為model_to_dict的相關方法:

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

但它不會從相關模型創建dict字段。

這是你可以使用的片段:

希望有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM