ModelSerializer使用模型属性

时间:2013-06-12 12:55:25

标签: django-rest-framework

我正在尝试序列化包含我想要序列化的属性字段的模型。

models.py:

class MyModel(models.Model):
    name = models.CharField(max_length=100)
    slug = models.AutoSlugField(populate_from='name')

    @property
    def ext_link(self):
        return "/".join([settings.EXT_BASE_URL, self.slug])

serializers.py:

class MyModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = MyModel
        fields = ('name', 'ext_link')

当试图访问相关的URL时,我在ext_link属性上遇到了序列化程序异常(KeyError)。

如何序列化ext_link属性?

2 个答案:

答案 0 :(得分:104)

因为它不是模型字段,所以需要将其显式添加到序列化程序类

class MyModelSerializer(serializers.ModelSerializer):
    ext_link = serializers.Field()

    class Meta:
        model = MyModel
        fields = ('name', 'ext_link')

编辑:在REST框架3中,添加到fields只会有效 - 不需要明确添加字段。

答案 1 :(得分:2)

作为@Robert Townley的注释,此版本适用于3.8.2版本:

class MyModelSerializer(serializers.ModelSerializer):
    ext_link = serializers.ReadOnlyField()

    class Meta:
        model = MyModel
        fields = "__all__"