【问题标题】:Django DRF: Name returned objects dynamicallyDjango DRF:动态命名返回的对象
【发布时间】:2021-06-14 15:41:25
【问题描述】:

我不确定dynaimc serializer 是否是我需要的,因为我不完全了解何时使用它。以下问题:

我的序列化程序返回一个工作/有效的 json,但形状不理想:

[
    {
        "store": {
            "last_update": "2021-06-01T12:06:00Z",
            "store_id": 238,
        }
    },
    {
        "store": {
            "last_update": null,
            "store_id": 1,
            }
        }
    }
]

我希望它在哪里:

[
    {
        "store_id": 238,
        "data": {
            "last_update": "2021-06-01T12:06:00Z",
        }
    },
    {
        "store_id": 1,
        "data": {
            "last_update": null,
        }
    }
]

简单模型:

class Store(models.Model):
    store_id = models.IntegerField("store id", null = True, blank = True)
    last_update = models.DateTimeField("last update")

序列化器:

class StoreSerializer(serializers.ModelSerializer):
    store = serializers.SerializerMethodField("get_info")

    def get_info(self, store):
        tmp = {}
        tmp["store_id"] = store.store_id
        tmp["last_update"] = store.last_update
        return tmp

    class Meta:
        model = Store
        fields = ["store"]

观看次数:

class StoreViewSet(viewsets.ViewSet):
    serializer_class = StoreSerializer
    http_method_names = ['get', 'head']

    def list(self, request):
        try:
            query = Store.objects.all()
            results = StoreSerializer(data = query, many = True)
            results.is_valid()
            return Response(data = results.data, status = status.HTTP_200_OK)
        except Exception as E:
            return Response(data = str(E), status = status.HTTP_400_BAD_REQUEST)

如何更改序列化程序以实现所需的 JSON 形状?

【问题讨论】:

    标签: django django-rest-framework django-serializer


    【解决方案1】:

    下面的序列化器将给出所需的输出:

    class StoreSerializer(serializers.ModelSerializer):
        data = serializers.SerializerMethodField()
    
        def get_data(self, store):
            return {
              "last_update": store.last_update
            }
    
        class Meta:
            model = Store
            fields = ["store_id","data"]
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-29
      • 2021-08-13
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多