我正在尝试序列化包含我想要序列化的属性字段的模型。
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
属性?
答案 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__"