首页 > 解决方案 > 多个字段的 SerializerMethodField

问题描述

这个问题可能有一个更简单的答案。但我不明白它是什么。请考虑这个例子

class ModelA(models.Model):
    a1 = models.CharField(max_length=100, default="")
    a2 = models.CharField(max_length=100, default="")

class ModelB(models.Model):
    modela = models.ForeignKey(ModelA, on_delete=models.CASCADE)
    b2 = models.CharField(max_length=100, default="")

通过下面,ModelBSerializer我可以获得使用for字段的a1a2的值。ModelASerializerMethodFieldmodela

class ModelBSerializer(serializers.ModelSerializer):
    modela = SerializerMethodField()
    class Meta:
        model = ModelB
        fields = (
            'modela',
            'b2',
        )

    def get_b1(self, obj):
        return obj.modela.a1  # or obj.modela.a2

但是,如果我同时想要a1anda2怎么办?我希望它们与和ModelBserializer一起包含在字段中。 modelab2

标签: djangodjango-modelsdjango-rest-frameworkdjango-serializer

解决方案


使用source如下参数,

class ModelBSerializer(serializers.ModelSerializer):
    modela = serializers.StringRelatedField()
    a1 = serializers.CharField(source='modela.a1')
    a2 = serializers.CharField(source='modela.a2')

    class Meta:
        model = ModelB
        fields = ('b2', 'modela', 'a1', 'a2')


StringRelatedField()返回__str__表示modela类 _


推荐阅读