Python 为django模型发出特定JSON的更干净/可重用的方式
我正在重写应用程序的后端以使用Django,并且我希望尽可能保持前端不变。我需要与项目之间发送的JSON保持一致 在models.py中,我有: 在views.py中,以JSON形式获取所有资源数据:Python 为django模型发出特定JSON的更干净/可重用的方式,python,django,json,Python,Django,Json,我正在重写应用程序的后端以使用Django,并且我希望尽可能保持前端不变。我需要与项目之间发送的JSON保持一致 在models.py中,我有: 在views.py中,以JSON形式获取所有资源数据: def get_resources(request): resources = [] for resource in Resource.objects.all(): resources.append({ "_id": resource._id
def get_resources(request):
resources = []
for resource in Resource.objects.all():
resources.append({
"_id": resource._id,
"name": resource.first,
"bookingPercentage": resource.bookingPercentage
})
return HttpResponse(json.dumps(resources))
这正是我所需要的,但它似乎有点与Django和/或Python背道而驰。使用.all.values将不起作用,因为bookinPercentage是派生属性
另一个问题是,还有其他类似的模型需要以几乎相同的方式使用JSON表示。我将重写类似的代码,只是对模型的值使用不同的名称。总的来说,有没有更好的方法可以做到这一点,即更具pythonic/djangthonic/不需要手动创建JSON?听起来您只是想用JSON序列化您的模型。您可以在core中使用Serialiser:
from django.core import serializers
data = serializers.serialize('json', Resource.objects.all(), fields=('name','_id', 'bookingPercentage'))
因此,只需传入模型类和要序列化到视图中的字段:
get_resources(request, model_cls, fields):
此处的文档以下是我在这种情况下的做法:
def get_resources(request):
resources = list(Resource.objects.all())
for resource in resources:
resource.booking = resource.bookingPercentage()
也就是说,我使用派生属性为每个实体创建一个新属性。它只是一个未存储在数据库中的本地属性,但可用于json.dumps调用。在字段中包含_id和bookingPercentage不会将它们包含在json中,它们仍然包装在对象属性字段中,但我需要它们位于顶层。为什么要向下投票,只是因为我的建议不符合你的喜好?并不是说它不符合我的喜好,而是因为我描述的原因它实际上不起作用。似乎字段只能用于限制字段条目
def get_resources(request):
resources = list(Resource.objects.all())
for resource in resources:
resource.booking = resource.bookingPercentage()