4

2 つの単純なモデルがあるとします。

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

と呼ばれる関連するメソッドがありますmodel_to_dict

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

ただし、関連するモデルから辞書フィールドは作成されません。

使用できるスニペットは次のとおりです。

それが役立つことを願っています。

于 2013-08-09T13:05:02.430 に答える
2

ネストされた dict を作成するデフォルトの方法はありませんが、関連する項目の値を選択できます。

# 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 で後処理を行って、必要なネストされた dict を取得できます。

于 2013-08-09T12:52:39.807 に答える