django admin 权限配置(类级别配置和字段级别配置)

本博客探讨了Django Admin中权限系统的应用,包括角色、权限的配置及对象级控制实现,通过实例展示了如何限制用户仅能修改创建的文章。

    一个常用的 Django admin 特性是它的权限系统,该系统可以扩展以包含低级权限。默认情况下,admin 可以细粒度控制角色和权限,但是这些角色仅应用于类级别:用户可以修改所有 所有文章  或者只修改自己发布的文章。

    只允许用户修改特定的对象。这常常称为低级 权限,因为它们只能修改特定数据库表格行。

    而综合权限可以修改表格中的任何记录。样例应用程序中的情况可能是您只希望用户看到他们创建的 文章。

1.新建Article

class Article(models.Model):
    
    author = models.ForeignKey(Employee,verbose_name='发布人')
    title = models.CharField('标题',max_length=20)
    times = models.DateTimeField('发布时间',auto_now=True)
    hits = models.IntegerField('点击量',max_length=1,null =True, blank=True,default=0)
    content = models.TextField('内容',null =True, blank=True,)
    comment=models.ManyToManyField(Comment,verbose_name='评论',null =True, blank=True,)

2.新建admin.py,修改

class ArticleAdmin(admin.ModelAdmin):
    list_display = ('author','title',)
    readonly_fields=('comment',)

 

#如果 'author' 的值是 None,那么这就是一个尚未保存的新记录。

#(您还可以检查 change 是否为 false,这指示是否将添加记录,

#但是检查 'author' 是否为空表示是否填写添加到 admin 之外的记录)。

#另一个低级权限是将文档列表限制在创建它们的用户范围内。ModelAdmin 类为此提供了一个钩子程序 —— 它有一个名为queryset() 的方法,#该方法可以确定任何列表页面返回的默认查询集。

    def save_model(self, request, obj, form, change):
        if getattr(obj, 'author', None) is None:
            print obj.author,'-------------------obj.author'
            obj.author = request.user
        obj.last_modified_by = request.user
        obj.save()
    def queryset(self, request):
        qs = super(ArticleAdmin, self).queryset(request)

        # If super-user, show all comments
        if request.user.is_superuser:
            return qs
       
        return qs.filter(author=request.user)

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值