博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
drf serializer官网所得
阅读量:4617 次
发布时间:2019-06-09

本文共 3873 字,大约阅读时间需要 12 分钟。

1,在serializer.save的时候要加入新的内容

save时,在request.data内容不够的情况下加入新的内容,

serializer.save(owner=request.user)

2,限制,报错

def multiple_of_ten(value):    if value % 10 != 0:        raise serializers.ValidationError('Not a multiple of ten')class GameRecord(serializers.Serializer):    score = IntegerField(validators=[multiple_of_ten])

3,更新原有数据

serializer = CommentSerializer(comment, data={
'content': u'foo bar'}, partial=True)

4,序列化套序列化

class UserSerializer(serializers.Serializer):    email = serializers.EmailField()    username = serializers.CharField(max_length=100)class CommentSerializer(serializers.Serializer):    user = UserSerializer(required=False)   #required=False表示可以为空    #many=True 表示接受多个值为list.
  content = serializers.CharField(max_length=200)   created = serializers.DateTimeField()

5,create

class UserSerializer(serializers.ModelSerializer):    profile = ProfileSerializer()    class Meta:        model = User        fields = ('username', 'email', 'profile')    def create(self, validated_data):        profile_data = validated_data.pop('profile')        user = User.objects.create(**validated_data)        Profile.objects.create(user=user, **profile_data)        return user

6,关系型序列化

class Album(models.Model):    album_name = models.CharField(max_length=100)    artist = models.CharField(max_length=100)class Track(models.Model):    album = models.ForeignKey(Album, related_name='tracks', on_delete=models.CASCADE)    order = models.IntegerField()    title = models.CharField(max_length=100)    duration = models.IntegerField()    class Meta:        unique_together = ('album', 'order')        ordering = ['order']    def __unicode__(self):        return '%d: %s' % (self.order, self.title)

class AlbumSerializer(serializers.ModelSerializer):    tracks = serializers.StringRelatedField(many=True)    class Meta:        model = Album        fields = ('album_name', 'artist', 'tracks')
==> 由于前面的__unicode__方法把两个结合在一起,并且设置了many=True,所以会有多个值 {    'album_name': 'Things We Lost In The Fire',    'artist': 'Low',    'tracks': [        '1: Sunflower',        '2: Whitetail',        '3: Dinosaur Act',        ...    ]}

class AlbumSerializer(serializers.ModelSerializer):    tracks = serializers.PrimaryKeyRelatedField(many=True, read_only=True)    class Meta:        model = Album        fields = ('album_name', 'artist', 'tracks')
{    'album_name': 'Undun',    'artist': 'The Roots',    'tracks': [        89,        90,        91,        ...    ]} 参数: queryset   指定关联的queryset,可以进行一些排除操作 many     可以指定多个数据,并且返回的数据格式为列表 allow_null   是否允许为空 pk_field    指定主键为唯一字段

class AlbumSerializer(serializers.ModelSerializer):    tracks = serializers.SlugRelatedField(        many=True,        read_only=True,        slug_field='title'     )    class Meta:        model = Album        fields = ('album_name', 'artist', 'tracks') ==>返回的是slug_field指定的字段
{
'album_name': 'Dear John', 'artist': 'Loney Dear', 'tracks': [ 'Airport Surroundings', 'Everything Turns to You', 'I Was Only Going Out', ... ] } 字段属性: slug_field :指定关联表的某个属性 queryset   指定集合 many     指多个 allow_null  是否可为空
RelatedField
import timeclass TrackListingField(serializers.RelatedField):    def to_representation(self, value):        duration = time.strftime('%M:%S', time.gmtime(value.duration))        return 'Track %d: %s (%s)' % (value.order, value.name, duration)class AlbumSerializer(serializers.ModelSerializer):    tracks = TrackListingField(many=True)    class Meta:        model = Album        fields = ('album_name', 'artist', 'tracks') ==> RelatedField字段分析了,重新定义to_representation方法,内部的value是实例对象
{    'album_name': 'Sometimes I Wish We Were an Eagle',    'artist': 'Bill Callahan',    'tracks': [        'Track 1: Jim Cain (04:39)',        'Track 2: Eid Ma Clack Shaw (04:19)',        'Track 3: The Wind and the Dove (04:34)',        ...    ]}

 

转载于:https://www.cnblogs.com/52forjie/p/10145277.html

你可能感兴趣的文章
iTerm2中粘贴tab问题
查看>>
SPFA算法 - Bellman-ford算法的进一步优化
查看>>
Darknet卷基层浅层特征可视化教程
查看>>
Laplace算子和Laplacian矩阵
查看>>
CentOS7 搭建gitlab服务器
查看>>
CSS控制文字,超出部分显示省略号
查看>>
NSMutableAttributedString实现富文本 (实现不同颜色和字体、下划线)
查看>>
贝叶斯规则
查看>>
解决Centos/Redhat,命令不存在
查看>>
项目实战—小饭桌
查看>>
ubuntu服务器版相关命令
查看>>
gdb
查看>>
flask下载zip文件报错TypeError
查看>>
彻底弄懂js循环中的闭包问题
查看>>
python测试开发django-24.表单提交之get请求
查看>>
帧动画布局文件 animation-list
查看>>
api接口通信安全性
查看>>
我想做个程序员:一位编程小白的App开发故事
查看>>
云服务器(uCloud)部署java web项目(四) apache转发请求到tomcat
查看>>
zoj 3165 (最小割,最大点权独立集)
查看>>