多个字段的 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
字段获取 ModelA
的 a1
或 a2
的值.
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
怎么办?我希望它们与 modela
和 b2
一起包含在 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__
表示modela
class
这个问题可能有更简单的答案。但我不明白它是什么。请考虑这个例子
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
字段获取 ModelA
的 a1
或 a2
的值.
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
怎么办?我希望它们与 modela
和 b2
一起包含在 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__
表示modela
class