在Django序列化程序中排除嵌套模型字段

时间:2018-11-26 08:14:03

标签: python django web

所以我有两个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"}
                     ]
        }
    ]

1 个答案:

答案 0 :(得分:1)

您需要将排除项放在ModelBSerializer中。

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

    class Meta:
        ...

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