如何防止管理员超级用户导致“站点匹配查询不存在”错误?

时间:2016-06-08 08:08:57

标签: python django high-availability

有很多关于Django errormessage Site matching query does not exist.的问题:

在所有这些情况下,原因被正确识别为django_site表中没有行,SITE_ID中的ID指定为settings.py

好吧,我想防止将来发生这种情况。现在,我已经给了一些管理员超级用户访问Django管理员。如果他们愿意,他们有能力销毁所有数据,并且他们对此负责。但是,我自己负责服务器可用性并希望防止任何Server 500错误。在目前的情况下,我的员工超级用户可以删除django_site中的对象,从而导致站点无法访问,我觉得这是不可接受的。

如何防止管理员超级用户无法访问完整的网站?

1 个答案:

答案 0 :(得分:1)

创建一个自定义管理类,如下所示:

class DeleteNotAllowedModelAdmin(admin.ModelAdmin):
    # Other stuff here
    def has_delete_permission(self, request, obj=None):
        return False

如果您只想阻止删除最后一个站点,并且在数据库中定义了多个站点时允许:

class DeleteNotAllowedModelAdmin(admin.ModelAdmin):
    # Other stuff here
    def has_delete_permission(self, request, obj=None):
        if Site.objects.count() > 1:
            return True
        return False

或类似的东西。

编辑:至于如何注册该自定义类,请查看here