django管理器类

2019-10-02  本文已影响0人  不知道火舞

管理器类

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

定制管理器类

  1. 增加额外的管理器方法
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)
上一篇下一篇

猜你喜欢

热点阅读