我在 Django 模型中有一个属性,我必须在序列化程序中显示它。我将字段放在序列化程序中,但它没有出现在响应中。
class Example(models.Model):
field_1 = models.ForeignKey(
Modelabc, on_delete=models.CASCADE, null=True, related_name="abc"
)
field_2 = models.ForeignKey(
Modelxyz,
on_delete=models.CASCADE,
null=True,
related_name="xyz",
)
name = models.CharField(max_length=25, blank=True)
@property
def fullname(self):
if self.name is not None:
return "%s%s%s" % (self.field_1.name, self.field_2.name, self.name)
return "%s%s" % (self.field_1.name, self.field_2.name)
序列化器是这样的:
class ExampleSerializer(serializers.ModelSerializer):
fullname = serializers.ReadonlyField()
class Meta:
model = Example
fields = [
"id",
"fullname",]
当我为此调用 get API 时,api 响应中未显示全名。问题是什么?
回答1
@property 属性不包含在 Django 序列化器字段中,因为仅显示 Django 模型字段。我通常为此使用以下解决方法。
- 创建一个 SerializerMethodField。
- 从方法返回 object.property。
因此,您的 Serializer 类将是:
class ExampleSerializer(serializers.ModelSerializer):
fullname = serializers.SerializerMethodField()
class Meta:
model = OnlineClass
fields = [
"id",
"fullname",
]
def get_fullname(self, object):
return object.fullname
回答2
我认为,在 ExampleSerializer
类中,模型应该是 Example
而不是 OnlineClass
并且字段应该包含模型内的所有字段。