代码之家  ›  专栏  ›  技术社区  ›  Naroju

多个字段的SerializerMethodField

  •  0
  • Naroju  · 技术社区  · 6 年前

    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 a2 属于 ModelA SerializerMethodField 对于 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级 a2级 ModelBserializer 田地和 莫德拉 b2 .

    1 回复  |  直到 6 年前
        1
  •  0
  •   JPG    6 年前

    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