在处理嵌套关系时,如果我们希望两个或多个实例保持一对一的创建关系,我们可以编写一个自定义管理器类。
自定义管理器类主要用于两种情况:
- 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