显示不同的模型管理员list_display和为不同用户组设置的字段

亚历克斯·T

在Django中,我有超级用户和一组内容编辑器。

当我以超级用户身份编辑模型时,我希望能够编辑所有字段。如果有人以编辑者身份登录,我想允许他仅编辑特定字段。

我已经用get_form方法做到了

class VideoAdmin(admin.ModelAdmin):    
    editor_fields = ('description','description_rewrited')

    def get_form(self, request, obj=None, **kwargs):
        if not hasattr(request.user, 'perms_list'):
            request.user.perms_list = request.user.groups.values_list('name',flat=True)

        if 'video_description_rewriter' in request.user.perms_list:
            print('rewrite fields to normal')
            self.fields = self.normaluser_fields

        return super(VideoAdmin, self).get_form(request, obj, **kwargs)

这个对我有用。但是,当我打开视频进行常规编辑时,它将超级用户字段设置为编辑器字段设置。

  1. 以超级用户身份打开管理模型-http: //joxi.ru/zAN5wWMIVjz429
  2. 以管理员身份打开管理员模型-http: //joxi.ru/p27LJPZiDNgeA7
  3. 现在,超级用户具有与编辑器相同的字段集-http: //joxi.ru/L21jko5TW0ydAX

我假设存在某种模板缓存?

白血球

你设置self.fieldsself.normaluser_fields当用户编辑器,但你不设置self.fields回来时,用户是管理员默认值。ModelAdmin对象是在应用程序加载时创建的,它们在所有用户之间共享!

在管理员进入页面时将字段更改回默认值将无法100%解决问题。当管理员和非管理员用户尝试同时进入编辑页面时,可能会发生争用情况。他们两个都可以得到相同的字段。

除了重新编写外get_form,您还可以通过重新编写get_fields方法来使其更简单

    def get_fields(self, request):
        if not hasattr(request.user, 'perms_list'):
            request.user.perms_list = request.user.groups.values_list('name',flat=True)

        if 'video_description_rewriter' in request.user.perms_list:
            print('rewrite fields to normal')
            return self.normaluser_fields

        return self.fields

该方法不会覆盖ModelAdmin对象中的任何值,因此更改仅对一个用户可见。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Django管理员list_display具有null的不同数据类型

来自分类Dev

在Vue-JS中为不同用户组显示不同菜单的最佳方法是什么?

来自分类Dev

从 Rails 中的用户组表查询管理员

来自分类Dev

为非管理员用户设置不同的路由页面(属性)(在 ruby on rails 上设计 gem)

来自分类常见问题

如何为用户和管理员设置不同的会话| CodeIgniter

来自分类Dev

如何在mongodb中为用户和管理员赋予不同的特权

来自分类Dev

更改Django管理员list_display中的可点击字段

来自分类Dev

管理员和用户的不同页面[userfrosting 0.3.1]

来自分类Dev

显示不同的list_display取决于用户

来自分类Dev

Django:我必须为管理员提供list_display吗?

来自分类Dev

如何在多个Linux安装上为不同用户设置组权限?

来自分类Dev

CodenameOne:是否可以为应用程序的不同用户组定义“视图”?

来自分类Dev

为自定义用户模型向Django管理员添加字段

来自分类Dev

jenkins的shell用户组和普通的shell用户组是不同的

来自分类Dev

为什么添加到本地管理员组的域管理员的行为不同?

来自分类Dev

如何使用简单的写入/删除方法为不同用户组织Redis缓存

来自分类Dev

如何在php中向管理员和用户发送不同的消息

来自分类Dev

Django管理员日期时间输入在Chrome和Safari中显示不同的格式

来自分类Dev

在Sonata管理员列表视图中显示不同的实体

来自分类Dev

django管理员list_display没有连接的外键ID

来自分类Dev

如何使用list_display = []在管理员中调用OneToOneField值

来自分类Dev

在Django管理员list_display中指定__str __()表示形式

来自分类Dev

Django管理员动态添加到list_display并创建ModelAdmin方法

来自分类Dev

django管理员list_display没有连接的外键ID

来自分类Dev

Django:已认证的不同用户模型

来自分类Dev

AADSTS65001:用户或管理员不同意使用ID为'<应用程序ID>的应用程序

来自分类Dev

如何在 cakedc 插件 cakephp3 中为不同的用户组设置不同的身份验证重定向 URL

来自分类Dev

显示当天预订活动的不同用户

来自分类Dev

显示不同用户类型的视图

Related 相关文章

  1. 1

    Django管理员list_display具有null的不同数据类型

  2. 2

    在Vue-JS中为不同用户组显示不同菜单的最佳方法是什么?

  3. 3

    从 Rails 中的用户组表查询管理员

  4. 4

    为非管理员用户设置不同的路由页面(属性)(在 ruby on rails 上设计 gem)

  5. 5

    如何为用户和管理员设置不同的会话| CodeIgniter

  6. 6

    如何在mongodb中为用户和管理员赋予不同的特权

  7. 7

    更改Django管理员list_display中的可点击字段

  8. 8

    管理员和用户的不同页面[userfrosting 0.3.1]

  9. 9

    显示不同的list_display取决于用户

  10. 10

    Django:我必须为管理员提供list_display吗?

  11. 11

    如何在多个Linux安装上为不同用户设置组权限?

  12. 12

    CodenameOne:是否可以为应用程序的不同用户组定义“视图”?

  13. 13

    为自定义用户模型向Django管理员添加字段

  14. 14

    jenkins的shell用户组和普通的shell用户组是不同的

  15. 15

    为什么添加到本地管理员组的域管理员的行为不同?

  16. 16

    如何使用简单的写入/删除方法为不同用户组织Redis缓存

  17. 17

    如何在php中向管理员和用户发送不同的消息

  18. 18

    Django管理员日期时间输入在Chrome和Safari中显示不同的格式

  19. 19

    在Sonata管理员列表视图中显示不同的实体

  20. 20

    django管理员list_display没有连接的外键ID

  21. 21

    如何使用list_display = []在管理员中调用OneToOneField值

  22. 22

    在Django管理员list_display中指定__str __()表示形式

  23. 23

    Django管理员动态添加到list_display并创建ModelAdmin方法

  24. 24

    django管理员list_display没有连接的外键ID

  25. 25

    Django:已认证的不同用户模型

  26. 26

    AADSTS65001:用户或管理员不同意使用ID为'<应用程序ID>的应用程序

  27. 27

    如何在 cakedc 插件 cakephp3 中为不同的用户组设置不同的身份验证重定向 URL

  28. 28

    显示当天预订活动的不同用户

  29. 29

    显示不同用户类型的视图

热门标签

归档