Django rest framework 使用模型属性的ModelSerializer

Django rest framework 使用模型属性的ModelSerializer,django-rest-framework,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_

我正在尝试序列化一个模型,该模型包含我也想序列化的属性字段

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\u link
属性上遇到了序列化程序异常(keyrerror)


如何序列化
ext\u link
属性?

因为它不是一个模型字段,所以需要显式地将它添加到serializer类中

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

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

正如罗伯特·汤利(Robert Townley)的评论所述,该版本的
3.8.2

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

    class Meta:
        model = MyModel
        fields = "__all__"

注意:Meta中的字段列表是可选的。如果省略
字段
,在上面的示例中,您将获得序列化数据中的所有
MyModel
字段加上
ext\u链接
。对于复杂的模型来说,这真是太棒了!编辑:至少,对于
djangorestframework==2.3.14
,这是正确的。对于我,使用序列化程序。字段给出了一个错误。如果未定义to_表示且视图为只读,则“serializers.ReadOnlyField”不起作用。我使用的是3.3.x,仅向字段添加属性是不够的。我仍然需要通过ext_link=serializers.ReadOnlyField()显式添加。在Python3.5.1和Django 1.10上使用DRF 3.4.6,添加到字段效果很好。注意:使用
字段=“\uu all\uu u”
我还必须按照jarmod的指定,使用版本3.7.7添加
myfield=serializers.ReadOnlyField()