[英]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.