Developer 2024 🎇限时优惠进行中,现在购买立即享受

现在购买

如何更优雅地让系统权限使用simplepro穿梭框

avatar宅记
1月20日1.3k次阅读

小宅今天专门花了一下午去优化admin,鉴于本人还有一丝强迫症,所以一切的一切,都得想要弄好弄舒服(bushi
但是今天在给继承了AbstractUser的自定义用户表配置user_permissions时,就遇到了一个比较令人抓狂的问题

最开始的配置和效果是这样的:

views.py

from django.contrib.auth.models import AbstractUser, Permission
from simplepro.components import fields
...
class User(AbstractUser):
    ...
    user_permissions = fields.TransferField(
        Permission,
        verbose_name="用户权限",
        blank=True,
        titles=['待选', '已选'],button_texts=['退回', '给予'],
        related_name="user_set",
        related_query_name="user",
    )
    ...

效果

QQ图片20220120160315.png

emmmm...这谁看得清哪个是哪个权限啊喂QAQ

在进行一波StackOverflow的逛之后,简而言之就是重新写一下Permisson的__str__,最后达到自己想要的效果:

views.py

from django.contrib.auth.models import AbstractUser, Permission
from simplepro.components import fields
...
def transPermissionName(name):
    trans = [
        ("Can view","查看"),
        ("Can add","添加"),
        ("Can change","修改"),
        ("Can delete","删除")
    ]
    for o,t in trans:
        name = name.replace(o,t)
    return name.replace(' ','')

Permission.__str__ = lambda self: '%s' % (transPermissionName(self.name))

class User(AbstractUser):
    ...
    user_permissions = fields.TransferField(
        Permission,
        verbose_name="用户权限",
        blank=True,
        titles=['待选', '已选'],button_texts=['退回', '给予'],
        related_name="user_set",
        related_query_name="user",
    )
    ...

关于这个transPermissionName函数,大家可以自己去写,反正我是为了业务需求随便写写了~ 最终效果:

QQ截图20220120160756.png

大功告成!!

发布评论
登录后发表内容
2个评论