我第一次使用Django站点框架实现一个解决方案,不确定是否有更好的方式在Django管理界面上实现它。目前我已经在前端工作了,但是我希望用户只能管理后端属于“他们”站点的内容(每个用户都分配给一个站点)。为了实现这一点,目前我正在通过在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)
在保存模型时,如果非超级用户保存一个新条目,确保默认为他们的站点:
def save_model(self, request, obj, form, change):
if not request.user.is_superuser:
obj.site = get_current_site(request)
obj.save()
这感觉非常繁琐,因为使用网站框架通过模型管理器限制前端内容的显示非常简单。有没有更好的方法?谢谢!