美文网首页
django管理器类

django管理器类

作者: 不知道火舞 | 来源:发表于2019-10-02 19:25 被阅读0次

    管理器类

    管理器类是提供给django模型的数据库查询操作的接口。django应用的每个模型至少有一个管理器类

    定制管理器类

    1. 增加额外的管理器方法
    • self.model: 获取self对象所在的模型类,这里是Address类
    class AddressManager(models.Manager):
        """定制管理器类,继承model.Manager类"""
        
        # 定制的方法,获取Address模型中是当前登录用户并且有默认地址的address对象
        def get_address_is_default(self, user):
            try:
                address = self.get(user=user, is_default=True)
            except self.model.DoesNotExist:
                address = None
            return address
    
    
    class Address(BaseModel):
        '''地址模型类'''
        user = models.ForeignKey('User', verbose_name='所属账户')
        receiver = models.CharField(max_length=20, verbose_name='收件人')
        addr = models.CharField(max_length=256, verbose_name='收件地址')
        zip_code = models.CharField(max_length=6, null=True, verbose_name='邮政编码')
        phone = models.CharField(max_length=11, verbose_name='联系电话')
        is_default = models.BooleanField(default=False, verbose_name='是否默认')
    
        # 创建AddressManager实例对象
        objects = AddressManager()
    
        class Meta:
            db_table = 'df_address'
            verbose_name = '地址'
            verbose_name_plural = verbose_name
    
    # 调用,返回当前登录用户,is_default=True的queryset对象
    address = Address.objects.get_address_is_default(user)
    
    1. 修改原来的管理器中的类方法
    class AddressManager(models.Manager):
        """定制管理器类,继承model.Manager类"""
    
        # 重写all()方法,返回is_default=True的所有对象
        def all(self):
            qs = super().all()
            return qs.filter(is_default=True)
    

    相关文章

      网友评论

          本文标题:django管理器类

          本文链接:https://www.haomeiwen.com/subject/aqqrpctx.html