【问题标题】:Nested Serializer in Django Rest FrameworkDjango Rest 框架中的嵌套序列化程序
【发布时间】:2019-12-23 11:46:59
【问题描述】:

我正在尝试制作一个嵌套的序列化程序,但是当我运行以下代码时,它给了我一个空列表。我试图复制this question的解决方案,我的问题完全相似

唯一的区别在于答案是序列化器。使用了序列化器,但我使用的是模型序列化器

class hhhSerializer(serializers.Modelserializer):
    id = serializers.IntegerField(read_only=True)
    name = serializers.CharField(read_only=True)
    class Meta:
        model = ItemBatch
        fields = ('id','name')


class dispatchhistorySerializer(serializers.ModelSerializer):

    truck_name = ReadOnlyField(source='truck_name.name')
    truck_type = ReadOnlyField(source='truck_type.name')

    items = hhhSerializer(many=True)
    class Meta:
        model = DispatchPlan
        fields = "__all__"

输出:

        "id": 35,
        "truck_name": "24 ft mxl 14 Ton",
        "truck_type": "Container",
        "items": [
            {},
            {},
            {},
            {},
            {},
            {},
            {},
            {},
            {},
            {}
        ],

【问题讨论】:

  • 避免使用像hhhSerializer这样的名字

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


【解决方案1】:

您必须在DispatchHistorySerializer.Meta.fields 显式声明该字段;现在,作为个人建议始终避免在字段列表中使用"all"

这段代码应该可以工作(我已经重命名了你的类以符合 python 约定)

class HhhSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    name = serializers.CharField(read_only=True)
    class Meta:
        model = ItemBatch
        fields = ('id','name')


class DispatchHistorySerializer(serializers.ModelSerializer):

    truck_name = ReadOnlyField(source='truck_name.name')
    truck_type = ReadOnlyField(source='truck_type.name')
    items = HhhSerializer(many=True)  # 2) here we say how to serialize 'items'

    class Meta:
        model = DispatchPlan
        fields = ('id', 'truck_name', 'truck_type', 'items',)  # 1) here we say: include 'items' please

EDIT:如果使用ModelSerializer,在Meta类中定义哪个模型;如果不是 ModelSerializer,请改用简单的 Serializer

【讨论】:

    猜你喜欢
    • 2021-06-23
    • 2016-05-14
    • 2018-12-13
    • 2015-08-14
    • 2015-05-11
    • 2015-02-17
    • 2020-07-07
    • 2014-07-27
    相关资源
    最近更新 更多