限制管理模型条目

Hel*_*nar 0 django django-models django-admin

我有一个名为Foo的模型:

class Foo(models.Model):
    name = models.CharField()
    entry = models.DateField()
Run Code Online (Sandbox Code Playgroud)

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

vin*_*ent 5

覆盖ModelAdmin的queryset和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)
Run Code Online (Sandbox Code Playgroud)

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