如何将模型对象的字段和值转换为字典的键和值



我正在Django中构建一个应用程序。

我正在开发一个API服务视图,该视图返回存储在我的模型中的城市列表,其中包含它们的功能:

def cities_list_api(request):
cities = target_area_input_data.objects.all()
data = {"cities":list(cities.values("pk","Name","Longitude","Latitude","Radius"))}
response = JsonResponse(data)
return response

返回:

{quot;城市":[{quotquot;pk"2,"名称":"罗马","经度":12.49,"纬度:41.89;半径":10.5},{"pk":6,"Name":"河内,越南"经度:105.84;纬度:21.02;半径":10.0},{"pk":1,"名称":"米兰","经度":9.19,"纬度":45.46:5.5},{"pk":4,"名称":"维罗纳","经度":10.97,"纬度:45.41;半径":4.5},{"pk":5,"Name":"pszczyna,Polonia"经度:18.93;纬度:49.98;半径":3.0}]}

看在shoness的份上,我可以写同样的视图,比如:

def cities_list_api(request):
cities = target_area_input_data.objects.all()
data = {"cities":list(cities.values())}
response = JsonResponse(data)
return response

这样我就不必把所有字段都写在values()括号内。

现在,我正在开发一个API服务视图,该视图返回给定城市id的城市特征。

def city_detail_api(request, pk):
try:
city = target_area_input_data.objects.get(pk=pk)
data = {    
"city":
{
"pk":city.pk,
"Name":city.Name,
"Longitude":city.Longitude,
"Latitude":city.Latitude,
"Radius":city.Radius,
}        
} 

response = JsonResponse(data)
return response

返回:

{"城市":{"pk":2,"名称":"罗马","经度":12.494757,"纬度":41.892786,"半径":10.5}}

我只想在字典中显示所需实例的所有属性,该字典保存在字典键city中,因此,为了简洁起见,我想将该视图更改为以下视图:

def city_detail_api(request, pk):
try:
city = target_area_input_data.objects.get(pk=pk)
data = {
"city":right_expression     
} 

response = JsonResponse(data)
return response

right_expression应该是什么?

即使这次我怎么能避免写所有的字段呢?

我会使用DRF序列化程序来实现这一点,例如:

from rest_framework import serializers
class CitySerializer(serializers.ModelSerializer):
class Meta:
fields = (
"id",
"name"
"longitud",
)
model = City

然后在视图中:

def city_detail_api(request, pk):
city = target_area_input_data.objects.get(pk=pk)
data = dict(city=CitySerializer(city).data)
response = JsonResponse(data)
return response

我认为使用DRF是一种更标准的方法,它让您有机会解析序列化程序中的一些计算字段,还嵌套了另一个序列化程序,最终您将拥有DRF序列化程序的所有功能。

最新更新