2014-12-08 187 views
0

我不知道这是否可能,但这里是我想实现的。调整django管理员默认权限

django admin有三种默认权限。添加/更改/删除。

我想要的就像是“查看”权限,有点像“更改”权限,但没有编辑权限。

我有一个国家模式,当客户端被创建时,它需要选择一个国家,因为它是外键。

但是,如果我将此字段设置为只读,它将无法按我的意愿选择国家/地区。因此,我必须授予用户“更改”权限,以便用户创建客户端信息时该国家将可用。

给予“更改”权限没有问题,但如果它具有“查看”权限会更好。

我做了很多搜索,没有找到“完美”的解决方案。

我认为肯定会有很多人想要这个权限。

那么如何让这个自定义的“查看”权限与django管理员顺利集成。

+0

并设置乡间田野?那究竟是什么问题? – 2014-12-08 08:14:02

+0

如何使这样的“查看”权限。 – castiel 2014-12-08 08:20:45

+0

https://docs.djangoproject.com/en/1.7/topics/auth/customizing/#custom-permissions和https://docs.djangoproject.com/en/1.7/topics/auth/default/#programmatically-creating -permissions。您可能必须重写ModelAdmins中的几个方法。 – 2014-12-08 08:26:20

回答

0

我希望这将帮助你:

class Client(models.Model): 
    name = models.CharField(...) 
    readonlyfield = models.CharField(...) 
    country = models.ForeignKey(...) 

    class Meta: 
     permissions = (
      ("change_country", "Can change country"), 
     ) 

class ClientAdmin(admin.ModelAdmin): 
    fields = ['name', 'readonlyfield', 'country'] 

    def get_readonly_fields(self, request, obj=None): 
     if obj and not request.user.has_perm('yourapp.change_country'): 
      return['readonlyfield', 'country'] 
     else: 
      return['readonlyfield'] 

因此,如果用户不具有change_country许可,他会一次(在创建)