簡體   English   中英

如何將 model object 的字段和值轉換為字典的鍵和值

[英]How to turn fields and values of a model object into keys and values of a dictionary

我正在 Django 中構建一個應用程序。

我正在開發一個 API 服務視圖,它返回存儲在我的 model 中的城市列表,具有以下功能:

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

返回:

{“城市”:[{“pk”:2,“名稱”:“羅馬”,“經度”:12.49,“緯度”:41.89,“半徑”:10.5},{“pk”:6,“名稱” :“越南河內”,“經度”:105.84,“緯度”:21.02,“半徑”:10.0},{“pk”:1,“名稱”:“米蘭”,“經度”:9.19,“緯度” “:45.46,“半徑”:8.0},{“pk”:3,“名稱”:“博洛尼亞”,“經度”:11.34,“緯度”:44.49,“半徑”:5.5},{“pk”: 4、“名稱”:“維羅納”、“經度”:10.97、“緯度”:45.41、“半徑”:4.5}、{“pk”:5、“名稱”:“pszczyna, Polonia”、“經度”: 18.93,“緯度”:49.98,“半徑”:3.0}]}

為了簡短起見,我可以編寫相同的視圖,例如:

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}}

我只想將所需實例的所有屬性顯示在字典中,該字典保存在字典 key 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 序列化程序功能的所有功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM