从跨越外键的Django模型创建JSON数据

时间:2018-07-03 01:26:00

标签: json django

我在Django 2模板中使用D3来创建绘图,我不确定如何最好地创建一个包含父模型和子模型数据的JSON对象。例如,这些是我的模型:

class Properties(models.Model):
  house_size     = models.IntegerField(blank=True, null=True)

class Prices(models.Model):
  price    = models.IntegerField(default=0)
  house    =models.ForeignKey(Properties,on_delete=models.CASCADE,default=0)

我知道要从Price创建一个JSON对象,我可以执行以下操作:

statdump = json.dumps(list(Prices.objects.all()), cls=DjangoJSONEncoder)

但是,如果我想创建一个包含price和house_size的JSON对象,该怎么办?

我可以想到解决此问题的效率低下的方法,例如遍历模板中的观察结果并在其中创建JSON数据,但这似乎不是很有效。有没有一种方法可以从包含house_size和price的视图传递JSON对象?

预先感谢

1 个答案:

答案 0 :(得分:0)

尝试使用

from django.db.models import F
from django.core import serializers

objectQuerySet =  Prices.objects.all().annotate(house_size = F('house__house_size'))
statdump = serializers.serialize('json', objectQuerySet, fields=('price','house_size'))

[编辑] 如果要将其返回到模板,请尝试使用以下方法:

from django.db.models import F
from django.core import serializers
from django.http import JsonResponse

objectQuerySet =  Prices.objects.all().annotate(house_size = F('house__house_size')).values('price','house_size')
return JsonResponse({'jsonObject'=list(objectQuerySet)},safe=False)