【问题标题】:Serialize a single Related Field in Django序列化 Django 中的单个相关字段
【发布时间】:2020-07-28 14:56:31
【问题描述】:

在我的 Django 应用程序中,我从序列化程序获取数据,如下所示:

{
        "id": 98,
        "flows": [
            {
                "id": 99,
                "asked_quantity": 14,
                "alloted_quantity": 14,
                "flow": 1,
                "kit": 1                    #this
            }
        ],
        "transaction_no": 2317,
        "dispatch_date": "2020-07-27T04:42:46.356000Z",
        "is_delivered": false,
        "model": "Rent",
        "driver_name": "__________",
        "driver_number": "__________",
        "lr_number": 0,
        "vehicle_number": "__________",
        "freight_charges": 0,
        "vehicle_type": "Part Load",
        "expected_delivery": "2020-07-27T04:42:46.356000Z",
        "remarks": "0",
        "send_from_warehouse": 1,            #this
        "sales_order": 98,
        "transport_by": 4,
        "owner": 2
    },

Flows 是一个多联字段,我只想从流和 send_from_warehouse 中扩展 kit,但是当我增加深度时,所有相关字段都会扩展。

这是我尝试这样做的方法:

class KSerializer(serializers.ModelSerializer):

    class Meta:
        model = Kit
        fields = "__all__"


class WSerializer(serializers.ModelSerializer):

    class Meta:
        model = Warehouse
        fields = "__all__"


class AFSerializer(serializers.ModelSerializer):
    kit = KSerializer(many=True)

    class Meta:
        model = AllotmentFlow
        fields = "__all__"


class AReportSerializer(serializers.ModelSerializer):

    flows = AFSerializer(many=True)
    send_from_warehouse = serializers.RelatedField(source='warehouse.pk', read_only=True)

    class Meta:
        model = Allotment
        fields = "__all__"

但我收到了错误消息,即“kitsis not serializable andsend_from_warehouse”从 JSON 中消失。 请解释为什么会发生这种情况以及正确的方法是什么

【问题讨论】:

    标签: django serialization django-rest-framework


    【解决方案1】:
    class AFSerializer(serializers.ModelSerializer):
    
        class Meta:
            model = AllotmentFlow
            fields = "__all__"
    
    
    class AReportSerializer(serializers.ModelSerializer):
    
        flows = AFSerializer(many=True)
        send_from_warehouse = serializers.SlugRelatedField(
        read_only=True,
        slug_field='send_from_warehouse'
     )
    
        class Meta:
            model = Allotment
            fields = "__all__"
    

    我猜这就是你要找的。​​p>

    【讨论】:

    • 它使用many=True 给出错误,但使用false 它返回与以前相同的值...` "send_from_warehouse": 1,` 我只想要仓库的名称而不是pk
    • 效果很好,谢谢,但是根据问题的另一部分,我应该如何在不增加深度的情况下扩展"kit": 1 #this
    • 尝试在您的 AReportSerializer 中定义 KitSerializer 并检查。并保持深度 = 1
    • 但是Kit序列化程序不应该在AFSerializer而不是AReportSerializer中定义吗?
    • 如果你在那里定义它,它将提供你现在得到的所有细节
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 1970-01-01
    • 2023-03-25
    • 2014-01-05
    相关资源
    最近更新 更多