内容介绍
通常在adminx后台编辑页面希望在多用户的情况下自动填充当前用户内容,省去下拉选择的麻烦,某些特定场景希望隐藏掉当前用户的内容,以及根据用户特定的屏蔽掉一些内容。
特别说明,如果不使用隐藏的方式而直接使用readonly_fields只读不编辑的方法,填充的内容为   无法达到实际要求的效果,需要修改的东西很多,因此采用隐藏的方式。
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"}),)
效果演示
无修改
自动填充且只读字段
整体效果