পুনঃনির্দেশ ব্যবহার করে আমার জেনেরিক সমাধানটি এখানে রয়েছে, এটি কোনও জিইটি পরামিতি রয়েছে কিনা তা পরীক্ষা করে দেখায়, যদি কোনওটি না থাকে তবে এটি ডিফল্ট গ্যারামিটি প্যারামিটারের সাথে পুনঃনির্দেশ করে। আমার কাছে একটি তালিকা_ ফিল্টার সেটও রয়েছে তাই এটি এটি বাছাই করে এবং ডিফল্টটি প্রদর্শন করে।
from django.shortcuts import redirect
class MyModelAdmin(admin.ModelAdmin):
...
list_filter = ('status', )
def changelist_view(self, request, extra_context=None):
referrer = request.META.get('HTTP_REFERER', '')
get_param = "status__exact=5"
if len(request.GET) == 0 and '?' not in referrer:
return redirect("{url}?{get_parms}".format(url=request.path, get_parms=get_param))
return super(MyModelAdmin,self).changelist_view(request, extra_context=extra_context)
কেবলমাত্র সতর্কতা যখন আপনি "" দিয়ে পৃষ্ঠাটিতে সরাসরি যাবেন? ইউআরএল-তে উপস্থিত, কোনও HTTP_REFERER সেট নেই তাই এটি ডিফল্ট প্যারামিটার ব্যবহার করবে এবং পুনর্নির্দেশ করবে। এটি আমার পক্ষে ঠিক আছে, আপনি যখন অ্যাডমিন ফিল্টারটি ক্লিক করেন এটি দুর্দান্ত কাজ করে।
আপডেট :
ক্যাভিয়েটের আশেপাশে যাওয়ার জন্য, আমি একটি কাস্টম ফিল্টার ফাংশন লিখেছি যা চেঞ্জলিস্ট_ভিউ কার্যকারিতা সরল করে তুলেছে। ফিল্টারটি এখানে:
class MyModelStatusFilter(admin.SimpleListFilter):
title = _('Status')
parameter_name = 'status'
def lookups(self, request, model_admin):
return (
(8, _('All')),
(0, _('Incomplete')),
(5, _('Pending')),
(6, _('Selected')),
(7, _('Accepted')),
)
def choices(self, cl):
from django.utils.encoding import force_text
for lookup, title in self.lookup_choices:
yield {
'selected': self.value() == force_text(lookup),
'query_string': cl.get_query_string({
self.parameter_name: lookup,
}, []),
'display': title,
}
def queryset(self, request, queryset):
if self.value() is None:
return queryset.filter(status=5)
elif int(self.value()) == 0:
return queryset.filter(status__lte=4)
elif int(self.value()) == 8:
return queryset.all()
elif int(self.value()) >= 5:
return queryset.filter(status=self.value())
return queryset.filter(status=5)
এবং চেঞ্জলিস্ট_ভিউ এখন উপস্থিত না থাকলে কেবলমাত্র ডিফল্ট প্যারামিটারটি পাস করে passes ধারণাটি হ'ল জেনেরিক্স ফিল্টারগুলির ক্ষমতা কোনও প্যারামিটার না পেয়ে সমস্ত কিছু দেখার ক্ষমতা থেকে মুক্তি পাবে। আমি সমস্ত সেই উদ্দেশ্যে স্থিতি = 8 নির্ধারণ করে সমস্ত দেখতে:
class MyModelAdmin(admin.ModelAdmin):
...
list_filter = ('status', )
def changelist_view(self, request, extra_context=None):
if len(request.GET) == 0:
get_param = "status=5"
return redirect("{url}?{get_parms}".format(url=request.path, get_parms=get_param))
return super(MyModelAdmin, self).changelist_view(request, extra_context=extra_context)