属性字段未出现在 django 序列化器中

问题描述 投票:0回答:3

我在 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 响应中未显示全名。有什么问题吗?

django django-models django-rest-framework
3个回答
0
投票

@property 属性不包含在 Django 序列化器字段中,因为仅显示 Django 模型字段。我通常使用以下解决方法来解决此问题。

  1. 创建一个SerializerMethodField
  2. 从方法返回object.property

因此,您的序列化器类将是:

class ExampleSerializer(serializers.ModelSerializer):
    fullname = serializers.SerializerMethodField()

    class Meta:
        model = OnlineClass
        fields = [
            "id",
            "fullname",
        ]
    
    def get_fullname(self, object):
        return object.fullname

0
投票

我认为,在

ExampleSerializer
类中,模型应该是
Example
而不是
OnlineClass
并且字段应该包含模型内的所有字段。


0
投票

使用序列化器方法字段并在响应中返回 obj.property。

© www.soinside.com 2019 - 2024. All rights reserved.