Serializer的几种设置
隐藏特定字段
如下,设置 writer 为只读就可以隐藏。
class ArticleSerializer(serializers.ModelSerializer):
+ writer = serializers.IntegerField(write_only=True)
class Meta:
model = Article
$ curl http://localhost:8000/api/articles/3.json
{“id”:3,”title”:”hoge”,”contents”:”fuga”}
writer消失不见了。
外键不是key值,显示具体信息
class ArticleSerializer(serializers.ModelSerializer):
+ writer = WriterSerializer()
class Meta:
model = Article
将writer字段设为WriterSerializer
$ curl http://localhost:8000/api/articles/3.json
{“id”:3,”writer”:{“id”:1,”name”:”racchai”},”title”:”hoge”,”contents”:”fuga”}
就可以显示具体的信息
同时生成外键数据时
ArticleSerializer如下
class ArticleSerializer(serializers.ModelSerializer):
writer = WriterSerializer()
class Meta:
model = Article
+ def create(self, validated_data):
+ writer = Writer(**validated_data.pop('writer'))
+ writer.save()
+ return super(ArticleSerializer, self).create(dict(validated_data, **{'writer': writer}))
在默认的 create 前生成Writer数据。
测试为
$ curl http://localhost:8000/api/articles.json -X POST -d “{\”writer\”:{\”name\”:\”new writer\”},\”title\”:\”aaa\”,\”contents\”:\”bbb\”}” -H “Content-Type: application/json” │
{“id”:4,”writer”:{“id”:2,”name”:”new writer”},”title”:”aaa”,”contents”:”bbb”}
就可以登录了。
测试一下。
$ curl http://localhost:8888/api/articles/4.json
{“id”:4,”writer”:{“id”:2,”name”:”new writer”},”title”:”aaa”,”contents”:”bbb”}