限制管理模型条目

时间:2009-09-04 18:57:17

标签: django django-models django-admin

我有一个名为Foo的模型:

class Foo(models.Model):
    name = models.CharField()
    entry = models.DateField()

我有2种类型的用户可以登录管理面板,常规用户和超级用户。我想禁止编辑/删除超过2天的Foo条目(通过使用输入日期字段),但超级用户可以不受任何限制地进行编辑。 我怎样才能做到这一点? 感谢

1 个答案:

答案 0 :(得分:5)

覆盖ModelAdmin的queryset and has_change_permission

from django.contrib.admin import ModelAdmin

class FooAdmin(ModelAdmin):
    def has_change_permission(self, request, obj):
        return obj is None or self.queryset(request).filter(pk=obj.pk).count() > 0

    def queryset(self, request):
        query = super(FooAdmin, self).queryset(request)
        if request.user.is_superuser:
            return query
        else:
            from datetime import datetime, timedelta 

            return query.filter(entry__gt=datetime.now()-timedelta(days=2))

admin.site.register(Foo, FooAdmin)

更改视图使用has_change_permission,列表视图使用queryset。我重用了重写的has_change_permission中的查询集以保持DRY(因此您可以在查询集中添加其他过滤器,而无需在更改权限检查中添加此逻辑),但值得一提的是它需要额外的查询。