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