首页 > 解决方案 > 在 django 序列化程序中排除嵌套模型字段

问题描述

所以我有两个 django 模型,但其中一个有一个我需要排除称为代码的字段。我还没有找到使用序列化程序类排除此字段的方法。

class ModelA(models.Model):
    modelBs = models.ManyToManyField('ModelB')

class ModelB(models.Model):
    # assume all sorts of fields here like name, location, etc..
    code = models.CharField(max_length=200)

我的问题是在序列化模型 A 时无法排除模型 B 代码,如下所示:

class ModelASerializer(serializers.ModelSerializer):
    class Meta:
        model = ModelA
        exclude = ('modelBs__code')

上面的序列化器不起作用。有人知道该怎么做吗?

我目前的输出是:

[
    {
        modelBs: [
                     {name: "Something", code: "XXXX"}
                 ]
    }
]

我想要的输出是:

    [
        {
            modelBs: [
                         {name: "Something"}
                     ]
        }
    ]

标签: pythondjangoweb

解决方案


您需要将排除项放入ModelBSerializer.

class ModelASerializer(serializers.ModelSerializer):
    modelBs = ModelBSerializer(read_only=True, many=True)

    class Meta:
        ...

class ModelBSerializer(serializers.ModelSerializer):
    class Meta:
        ...
        exlude = ("code",)

推荐阅读