San*_*its 80 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])
Run Code Online (Sandbox Code Playgroud)
serializers.py:
class MyModelSerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = ('name', 'ext_link')
Run Code Online (Sandbox Code Playgroud)
当试图访问相关的URL时,我在ext_link属性上遇到了序列化程序异常(KeyError).
我如何序列化ext_link属性?
Tom*_*tie 117
因为它不是模型字段,所以需要将其显式添加到序列化程序类中
class MyModelSerializer(serializers.ModelSerializer):
ext_link = serializers.Field()
class Meta:
model = MyModel
fields = ('name', 'ext_link')
Run Code Online (Sandbox Code Playgroud)
编辑:在REST框架3中添加__CODE__将只是工作 - 不需要显式添加字段.
Wil*_*low 13
接受的答案似乎对我不起作用,也不起作用ReadOnlyField .
但是,当我使用与属性函数的返回类型相对应的字段时,我取得了成功。
因此,对于这个例子,我会这样做:
class MyModelSerializer(serializers.ModelSerializer):
ext_link = serializers.CharField()
class Meta:
model = MyModel
fields = ('name', 'ext_link')
Run Code Online (Sandbox Code Playgroud)
我已经能够用ListField、DictField、 和IntegerField来做到这一点。
作为@Robert Townley评论,此版本适用3.8.2:
class MyModelSerializer(serializers.ModelSerializer):
ext_link = serializers.ReadOnlyField()
class Meta:
model = MyModel
fields = "__all__"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24464 次 |
| 最近记录: |