【问题标题】:SerializerMethodField for more than one fields多个字段的 SerializerMethodField
【发布时间】:2018-09-01 13:49:08
【问题描述】:

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

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,我可以使用SerializerMethodFieldmodela 字段获取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 字段中。

【问题讨论】:

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


    【解决方案1】:

    使用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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-09
      • 1970-01-01
      • 2016-04-23
      • 2022-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多