首页 > 其他 > 详细

Django restframework 嵌套关系处理

时间:2019-06-19 18:57:42      阅读:161      评论:0      收藏:0      [点我收藏+]

场景:带有外键的model,且是始终一对一创建的关系。

model.py:

class Album(models.Model):
    album_name = models.CharField(verbose_name=u名称, max_length=100)
    artist = models.CharField(max_length=100)

    class Meta:
        db_table = album
        verbose_name = ualbum表

class Track(models.Model):
    album = models.ForeignKey(Album, related_name=tracks)
    order = models.IntegerField()
    title = models.CharField(max_length=100)
    duration = models.IntegerField()

    class Meta:
        db_table = track

序列化serializer.py如下:

class AlbumSerializer(serializers.ModelSerializer):
    class Meta:
        model = Album
        fields = (id, album_name, artist)


class TrackSerializer(serializers.ModelSerializer):
    album = AlbumSerializer()

    class Meta:
        model = Track
        fields = (id, order, title, duration, album)
        depth = 1

    def create(self, validated_data):
        print validated_data
        album_data = validated_data.pop(album)
        album = Album.objects.create(**album_data)
        validated_data[album] = album
        track = Track.objects.create(**validated_data)
        return track

这里有四点需要注意:

1、album = AlbumSerializer() 表示Album里的字段为必填,若不是必填required=False

2、如果嵌套表示应该是项列表,则应将该many=True标志传递给嵌套序列化

3、create()、update()方法必须重写。默认值ModelSerializer .create().update()方法不包括对可写嵌套表示的支持。

4、参数的组装形式如下:

{
    "order": null,
    "title": "",
    "duration": null,
    "album": {
        "album_name": "",
        "artist": ""
    }
}

views.py:

class AlbumViewSet(viewsets.ModelViewSet):
    queryset = Album.objects.all()
    serializer_class = AlbumSerializer


class TrackViewSet(viewsets.ModelViewSet):
    queryset = Track.objects.all()
    serializer_class = TrackSerializer

urls.py:

router = routers.DefaultRouter(trailing_slash=True)
router.register(ralbum, views.AlbumViewSet, base_name=album)
router.register(rtrack, views.TrackViewSet, base_name=track)

运行:http://127.0.0.1:8000/track/,页面如下:技术分享图片

 

Django restframework 嵌套关系处理

原文:https://www.cnblogs.com/wangyingblock/p/11053177.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!