多个字段的 SerializerMethodField

SerializerMethodField for more than one fields

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

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 中,我可以使用 SerializerMethodField for modela 字段获取 ModelAa1a2 的值.

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

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

使用 source 参数如下,

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

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


StringRelatedField()return__str__表示modelaclass