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

 

posted @   yingzi__block  阅读(256)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示