簡體   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