SerializerMethodField用于多个字段

时间:2018-09-01 13:49:08

标签: django django-models django-rest-framework django-serializer

这个问题可能会有一个简单的答案。但是我不明白那是什么。请考虑以下示例

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以下,我可以使用a1 for a2字段来获取ModelA的{​​{1}}或SerializerMethodField的值。 / p>

modela

但是,如果我同时想要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 a1怎么办?我希望它们与a2ModelBserializer一起包含在modela字段中。

1 个答案:

答案 0 :(得分:0)

使用如下的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