【Django3.0功能开发】apps篇:adminx编辑页面自动填充当前用户和特定用户隐藏通用方法

内容介绍

通常在adminx后台编辑页面希望在多用户的情况下自动填充当前用户内容,省去下拉选择的麻烦,某些特定场景希望隐藏掉当前用户的内容,以及根据用户特定的屏蔽掉一些内容。

特别说明,如果不使用隐藏的方式而直接使用readonly_fields只读不编辑的方法,填充的内容为 &nbsp 无法达到实际要求的效果,需要修改的东西很多,因此采用隐藏的方式。

models.py

# 内容大类类别模型
class ArticleCategory(models.Model):
	......
    created_date = models.DateTimeField(default=timezone.now, verbose_name='创建时间', help_text='创建时间')
    add_user = models.ForeignKey(
        User, related_name='ArticleCategoryAddUser', on_delete=models.CASCADE,
        verbose_name='创建用户', help_text="创建用户"
    )

    class Meta:
        verbose_name = '文章类别管理'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.category_name

adminx.py

# 后台编辑权限设置,非设置身份不可修改内容
UserRightsList = ["Root", "ReviewUser"]

# 内容大类类别管理
class ArticleCategoryAdmin(object):
    list_display = ['add_user', 'created_date']
	......
    # 重写instance_forms实现表单某些特殊功能
    def instance_forms(self):
        super().instance_forms()
        # 默认修改或者新增数据都在add_user中填充当前登陆用户并隐藏
        self.form_obj.initial['add_user'] = self.request.user.id
        self.form_layout = (Fieldset(None, 'add_user', **{
    
    "style": "display:None"}),)
        # 允许UserRightsList中的身份进行修改,其他身份status字段隐藏
        if self.request.user.user_role not in UserRightsList:
            self.form_layout = (Fieldset(None, 'status', **{
    
    "style": "display:None"}),)

效果演示

无修改
在这里插入图片描述
自动填充且只读字段
在这里插入图片描述
整体效果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_20288327/article/details/112798609