扩展Group模型

Django有自带的Group模型,但和User模型一样,自带的Group模型也无法满足我的项目需求。

给Group模型增加field

比如要给Group增加一个field叫type,用于区分group的类型,可以通过如下方法增加。

if not hasattr(Group, 'type'):
    field = models.CharField(max_length=64, verbose_name="type", null=True, default=GroupType_enum.department.value, blank=False,choices=GroupType_enum.choices)
    field.contribute_to_class(Group, 'type')

增加完后要进行数据库迁移。

给Group模型增加function

可以通过代理的方式给Group增加function

class Group(Group):
    class Meta:
        proxy = True  

    def all_departments():
        return Group.objects.filter(type=GroupType_enum.department.value)

重新定义Group这个model,继承自系统的Group model,设置proxy=true指定这个新的model为代理。新定义的代理Group和系统的Group就会共用一个数据库表了。

代理的model只能定义 function,不能定义新的field。

要注意的是,在项目的其他地方要用到Group的地方,要import这个新定义的Group,而不是Import系统的Group。因为系统的Group并没有被改变,不能访问这个代理Group定义的function。

有人可能会问代理系统的Group后为什么还叫Group,换个名字不好吗,比如MyGroup?

答案:可以使用其他名字,但是在使用权限模型guardian的时候,guardian只认User和Group这两个类名,换了名字之后无法设置组权限了。

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值