django restframework 模型管理器的使用

在处理嵌套关系时,如果我们希望两个或多个实例保持一对一的创建关系,我们可以编写一个自定义管理器类。

自定义管理器类主要用于两种情况:

  • 1.修改原始查询集,重写all()方法
  • 2.向管理器类中添加额外的方法,如向数据库中插入数据。

管理类的编写如下所示:

from django.db.models.manager import Manager


class TrackManager(Manager):

    def create_track(self, validated_data):
        from models import Track
        from models import Album
        album_data = validated_data.pop('album')
        album = Album.objects.create(**album_data)
        validated_data['album'] = album
        track = Track.objects.create(**validated_data)
        return track

    def get_queryset(self):
        return Manager.get_queryset(self).filter(is_deleted=False)
    

注意:model的引入必须在方法内,在头部引入会出错。

 

管理类的使用

1、model.py中的导入引用

class Track(models.Model):
    album = models.ForeignKey(Album, related_name='tracks')
    order = models.IntegerField()
    title = models.CharField(max_length=100)
    duration = models.IntegerField()
    is_deleted = models.BooleanField(default=False)
    creator = models.CharField(max_length=100, null=True)

    objects = managers.TrackManager()

    class Meta:
        db_table = 'track'

2、serializer.py中的使用:

 def create(self, validated_data):
        track = Track.objects.create_track(validated_data)
        return track

 

转载于:https://www.cnblogs.com/wangyingblock/p/11090740.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值