繁体   English   中英

在Django管理员中使用Django站点框架

[英]Using the Django sites framework in the Django admin

我是第一次使用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)

save_model可以确保非超级用户是否保存新条目,该条目默认为其站点:

def save_model(self, request, obj, form, change):
    if not request.user.is_superuser:
        obj.site = get_current_site(request)

    obj.save()

鉴于使用站点框架来限制内容的前端显示(使用模型管理器)是如此简单,这让人感到难以置信。 有没有更好的方法来解决这个问题?

谢谢!

就在这里。 创建您自己的自定义admin基类。 从该类派生所有其他管理类。

class MyAdmin(admin.ModelAdmin):

    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(MyAdmin, self).get_form(request, obj, **kwargs)

    def get_queryset(self, request):
        qs = super(MyAdmin, 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()

然后,

class FaqCategoryAdmin(MyAdmin): 
   # now this class is dry. Because repetitive code is in parent

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM