我有一个名为Foo的模型:
class Foo(models.Model):
name = models.CharField()
entry = models.DateField()
我有2种类型的用户可以登录管理面板,常规用户和超级用户。我想禁止编辑/删除超过2天的Foo条目(通过使用输入日期字段),但超级用户可以不受任何限制地进行编辑。 我怎样才能做到这一点? 感谢
答案 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(因此您可以在查询集中添加其他过滤器,而无需在更改权限检查中添加此逻辑),但值得一提的是它需要额外的查询。