【发布时间】:2017-10-24 01:24:33
【问题描述】:
我是第一次使用 Django 站点框架实现一个解决方案,但不确定是否有更好的方法在 Django admin 上实现它。
目前我让它在前端工作,但我希望限制用户只管理属于“他们”站点的后端内容(每个用户都分配到一个站点)。
目前为此,我通过在 Admin 类中指定相应的字段来拆分超级用户 (is_superuser) 和其他任何人可用的字段。然后我将覆盖以下内容:
get_form 方法根据用户返回不同的表单。例如,超级用户可以为任何网站创建内容,而任何其他用户只能为自己的网站创建内容。
def get_form(self, request, obj=None, **kwargs):
if request.user.is_superuser:
self.fieldsets = self.user_fieldsets + self.superuser_fieldsets
else:
self.fieldsets = self.user_fieldsets
return super(FaqCategoryAdmin, self).get_form(request, obj, **kwargs)
get_queryset 方法,仅显示用户有权访问的站点的相关条目。
def get_queryset(self, request):
qs = super(FaqCategoryAdmin, self).get_queryset(request)
if request.user.is_superuser:
return qs
else:
return qs.filter(site=settings.SITE_ID)
save_model 用于确保如果非超级用户保存新条目,则默认为他们的站点:
def save_model(self, request, obj, form, change):
if not request.user.is_superuser:
obj.site = get_current_site(request)
obj.save()
考虑到使用站点框架来限制内容的前端显示非常简单(使用模型管理器),这感觉非常繁重。有没有更好的方法来解决这个问题?
谢谢!
【问题讨论】: