【问题标题】:How to serialize in Django如何在 Django 中序列化
【发布时间】:2017-10-15 06:03:40
【问题描述】:

我在 Django 中有一个序列化程序,如下所示:

class ListSerializer(serializers.HyperlinkedModelSerializer):
    vehicles = serializers.HyperlinkedRelatedField(
        view_name='asset-detail',
        many=True,
        read_only=True
    )

    class Meta:
        model = List
        fields = ('url', 'name', 'start', 'stop', 'state', 'vehicles')

我得到的结果如下:

[
    {
        "url": "http://127.0.0.1:8000/sales/api/v1/lists/3741/", 
        "name": "DEA 2017", 
        "start": "2017-03-09T10:00:00", 
        "stop": "2017-12-31T12:00:00", 
        "state": "OPEN", 
        "vehicles": [
            "http://127.0.0.1:8000/sales/api/v1/assets/134299/", 
            "http://127.0.0.1:8000/sales/api/v1/assets/154368/", 
            "http://127.0.0.1:8000/sales/api/v1/assets/154367/", 
            "http://127.0.0.1:8000/sales/api/v1/assets/154246/", 
            "http://127.0.0.1:8000/sales/api/v1/assets/155906/", 
            "http://127.0.0.1:8000/sales/api/v1/assets/155212/", 
            "http://127.0.0.1:8000/sales/api/v1/assets/154574/", 
            "http://127.0.0.1:8000/sales/api/v1/assets/155683/", 
            "http://127.0.0.1:8000/sales/api/v1/assets/153347/", 
            "http://127.0.0.1:8000/sales/api/v1/assets/153183/", 
            "http://127.0.0.1:8000/sales/api/v1/assets/153182/", 
            "http://127.0.0.1:8000/sales/api/v1/assets/153152/", 
            "http://127.0.0.1:8000/sales/api/v1/assets/153116/", 
            "http://127.0.0.1:8000/sales/api/v1/assets/154913/", 
            "http://127.0.0.1:8000/sales/api/v1/assets/152389/", 
            "http://127.0.0.1:8000/sales/api/v1/assets/153459/", 
            "http://127.0.0.1:8000/sales/api/v1/assets/153568/", 
            "http://127.0.0.1:8000/sales/api/v1/assets/153659/"
        ]
    }
]

如果我点击vehicles 中的其中一个网址,我会得到一个对象,如下所示:

{
    "vin": "WVWZZZ6RZEY104640",
    "make": "VOLKSWAGEN", 
    "model": "POLO", 
    "fuel": "Diesel"
}

我想要的是用对象而不是 url 来获得结果。

因此如下:

[
        {
            "url": "http://127.0.0.1:8000/sales/api/v1/lists/3741/", 
            "name": "DEA 2017", 
            "start": "2017-03-09T10:00:00", 
            "stop": "2017-12-31T12:00:00", 
            "state": "OPEN", 
            "vehicles": [
                {
                   "vin": "WVWZZZ6RZEY104123",
                   "make": "VOLKSWAGEN", 
                   "model": "POLO", 
                   "fuel": "Diesel"
                }, 
                {
                   "vin": "WVWZZZ6RZEY10452",
                   "make": "VOLKSWAGEN", 
                   "model": "Golf", 
                   "fuel": "Diesel"
                }, 
                {...},
                {...},
                {...},
                ....
            ]
        }
    ]

有什么建议吗?

附:我完全是初学者,请怜悯:)

【问题讨论】:

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


    【解决方案1】:

    我相信您确实有一个 Vehicle 模型来表示 Vehicle 属性。 然后您可以为车辆创建序列化程序并为您使用它 列出序列化程序如下:

     class VehicleSerializer(serializers.ModelSerializer):
       """Serializer for vehicle"""
    
          class Meta:
             model = Vehicle
    
    
    
     class ListSerializer(serializers.HyperlinkedModelSerializer):
        vehicles = VehicleSerializer(many=true)
    
        class Meta:
            model = List
            fields = ('url', 'name', 'start', 'stop', 'state', 'vehicles')
    

    【讨论】:

      【解决方案2】:

      您正在寻找嵌套的序列化程序,解释了 there

      【讨论】:

      • 可能,但由于我们没有模型,更多的只是猜测。
      猜你喜欢
      • 2016-12-15
      • 2011-11-21
      • 2011-08-11
      • 2021-07-13
      • 2014-02-14
      • 1970-01-01
      • 1970-01-01
      • 2014-03-19
      • 2022-01-11
      相关资源
      最近更新 更多