簡體   English   中英

Django-自定義管理員操作

[英]Django - Custom admin action

我正在創建一個自定義django admin操作,以在模板中的圖表中顯示所選項目,而我遇到的問題是它顯示了所有現有項目,而我只想顯示用戶在管理部分中選擇。

這是admin.py部分,該部分應過濾用戶選擇的項目:

    def show_gantt_chart_of_selected_projects(modeladmin, request, queryset):
    selected = request.POST.getlist(admin.ACTION_CHECKBOX_NAME)
    ct = ContentType.objects.get_for_model(queryset.model)
    return HttpResponseRedirect("/xxx/?ct=%s&ids=%s" % (ct.pk, ",".join(selected))) 

這是view.py部分,應獲取過濾后的項目:

def index(request):
projects = Project.objects.order_by('projectName') // I think this line could be the problem
    context = {'projects': projects }
    return render_to_response('xxx/ganttChart.html', context, context_instance=RequestContext(request))

當我打開圖表站點時,URL顯示用戶正確選擇的項目(例如http:// xxxx:xxxx / xxx /?ct = 15&ids = 10,1,3,5 ),但圖表仍顯示所有現有項目。

admin操作的queryset參數已包含所選項目。 更改為:

def show_gantt_chart_of_selected_projects(modeladmin, request, queryset):
    ct = ContentType.objects.get_for_model(queryset.model)  # why do you do this, you're not using it?
    return HttpResponseRedirect("/xxx/?ct=%s&ids=%s" % (ct.pk, ",".join(queryset.values_list('pk', flat=True))) 

順便說一句,您應該使用反向URL解析而不是對URL進行硬編碼。

View,我可以自由切換到基於類的版本。 您最終還是要這樣做:

from django.views.generic import ListView

class IndexView(ListView):
    template_name = 'xxx/ganttChart.html'
    context_object_name = 'projects'
    model = Project

    def get_queryset(self):
        return Project.objects.filter(
            pk__in=self.request.GET.get('ids','').split(','),
        ).order_by('projectName')
index = IndexView.as_view()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM