【发布时间】:2019-03-15 22:58:50
【问题描述】:
我正在尝试将查询集解析为 JSON 对象,以便每个键都是模型的主键,每个值都是包含所有其他字段的 JSON 对象。
myjson = {
apple: { color: "r", calories: 10},
banana: { color: "w", calories: 50}
}
这是收集数据的模型和 Django 视图(基于此blog post):
class Fruit(models.Model):
fruit_id = models.CharField(primary_key=True)
color = models.CharField(max_length=50)
calories = models.IntegerField()
def get_FruitsTableDjango(request):
fruits_table = Fruit.objects.all().values()
fruits_table_list = list(fruits_table ) # important: convert the QuerySet to a list object
return JsonResponse(fruits_table_list , safe=False)
但是在客户端(通过 AJAX),这会返回一个对象数组:
mydata = [
0: { fruit_id: "apple", color: "r", calories: 10},
1: { fruit_id: "banana", color: "w", calories: 50}
]
我还发现了here 我如何可以按预期重做这个数组:
//Restructure JSON by fruit_id name
fruits= {},
mydata.forEach(function (a) {
var temp = {};
Object.keys(a).forEach(function (k) {
if (k === 'fruit_id') {
fruits[a[k]] = temp; //gets fruit_id
return;
}
temp[k] = a[k]; //fill the temp variable with elements
});
});
mydata=fruits; //overwrite initial array with nicely-rearranged-by-fruitId object
我基本上有两个问题:
- 是否有更直接的方法来获取所需的 JSON(由主键嵌套)?
- 如果不是,客观上哪里是执行对象解析逻辑的最佳位置:在 Javascript 中的客户端(如上),或在服务器端,例如在 Django 视图中?
【问题讨论】:
-
使用 django rest 框架。很容易实现它
-
@webbyfox 谢谢,我正在考虑探索这个选项,但对它的了解仍然有限。您能否简要说明如何使用 DRF“轻松”实现这一目标?