有很多关于Django errormessage Site matching query does not exist.
的问题:
在所有这些情况下,原因被正确识别为django_site
表中没有行,SITE_ID
中的ID指定为settings.py
。
好吧,我想防止将来发生这种情况。现在,我已经给了一些管理员超级用户访问Django管理员。如果他们愿意,他们有能力销毁所有数据,并且他们对此负责。但是,我自己负责服务器可用性并希望防止任何Server 500错误。在目前的情况下,我的员工超级用户可以删除django_site
中的对象,从而导致站点无法访问,我觉得这是不可接受的。
如何防止管理员超级用户无法访问完整的网站?
答案 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