Django—模型—数据查询(自定义管理器)

  • models.py


    from django.db import models
    from django.db.models import Manager
    
    
    # 扩展Manager管理器功能
    class MyManager(Manager):
        # 获取结果集,
        def get_queryset(self):
            # 获取查询结果集
            # data =
            # 把sex不为空显示出来
            # data = filter(sex__isnull=True)
            return super().get_queryset().filter(sex__isnull=False)
    
        def after(self, date):
            data = User.objects.filter(regtime__gt=date)
            return data
    
    
    
    class Detail(models.Model):
        did = models.AutoField(primary_key=True)
        phone = models.CharField(max_length=20, blank=True, null=True)
        uid = models.IntegerField(blank=True, null=True)
    
        class Meta:
            managed = False
            db_table = 'detail'
    
    class User(models.Model):
        uid = models.AutoField(primary_key=True)
        username = models.CharField(unique=True, max_length=30)
        password = models.CharField(max_length=128)
        regtime = models.DateTimeField()
        sex = models.IntegerField(blank=True, null=True)
    
        class Meta:
            managed = False
            db_table = 'user'
    
        def __str__(self):
            return self.username + str(self.uid)
        # 可以自定义
        objects = Manager()  # 系统管理器
        user_manager = Manager()  #自定义管理器
        sex_manager = MyManager()
    
        @classmethod
        def after(cls,date):
            return cls.user_manager.filter(regtime__gt=date)
    
        @classmethod
        def get_sexes(cls):
            return cls.objects.filter(sex__isnull=False)
  • views.py


    from django.db.models import Count, Q
    from django.http import HttpResponse
    from django.shortcuts import render
    
    # Create your views here.
    from App.models import User
    
    def manage(request):
        # 使用自定义管理器查询
        # data = User.user_manager.all()
        # data = User.sex_manager.all()
        # print(data)
        # for user in data:
        #     print(user.sex)
    
        # 调用自己的类方法
        # data = User.after('2020-03-11')
        # print(data)
    
        # 调用管理器的方法sex_manager
        data = User.sex_manager.after('2020-03-11')
        print(data)
    
        return HttpResponse("自定义管理器")
发布了180 篇原创文章 · 获赞 6 · 访问量 2318

猜你喜欢

转载自blog.csdn.net/piduocheng0577/article/details/105010065