2016-08-13 3 views
0

моего кодаобновления значения параметра контекста из get_queryset() Джанго

class Leads(LoginRequiredMixin, ListView): 

def get_queryset(self): 
q = self.request.GET.get('q', "all") 
     if q == "customer": 
      qs = alllead.objects.filter(isCustomer="yes") 
     elif q == "lead": 
      qs = alllead.objects.filter(isCustomer="no") 
     else: 
      qs = self.queryset 
return qs 

def get_context_data(self, **kwargs): 
    context = super(Leads, self).get_context_data(**kwargs) 
    count = self.queryset.count() 
    context['count'] = count or "000" 
return context 

поэтому я фильтрование моего QuerySet, а также мне нужно, чтобы установить количество записей в качестве параметра контекста «считать» но число записей не является обновление так я изменил свой код

def get_queryset(self): 
q = self.request.GET.get('q', "all") 
     if q == "customer": 
      qs = alllead.objects.filter(isCustomer="yes") 
     elif q == "lead": 
      qs = alllead.objects.filter(isCustomer="no") 
     else: 
      qs = self.queryset 
return qs 

def get_context_data(self, **kwargs): 
    context = super(Leads, self).get_context_data(**kwargs) 
    q = self.request.GET.get('q', "none") 
    if q == "customer": 
     count = alllead.objects.filter(isCustomer="yes").count() 
    elif q == "lead": 
     count = alllead.objects.filter(isCustomer="no").count() 
    else: 
     count = self.queryset.count() 
    context['count'] = count or "000" 
return context 

я думаю, что я дублирование кода, и это не правильный способ сделать это. может кто-нибудь предложить мне оптимальный способ обновления

context['count'] = qs.count() 
#inside get_queryset() 

ответ

0

После того, как вы назвали суперкласса get_queryset(), то достаточное количество добавляется в контекст как alllead_list; вы можете просто получить к нему доступ оттуда.

def get_context_data(self, **kwargs): 
    context = super(Leads, self).get_context_data(**kwargs) 
    count = context['alllead_list'].count() 

Однако, я не думаю, что вам нужно сделать это в представлении; вы можете так же легко сделать это в шаблоне, обратившись к {{ allead_list.count|default:"000" }}.

Редактировать Поскольку QuerySet разбивается на страницы, вы можете получить счетчик непосредственно от постраничной навигации: context['paginator'].count или в шаблоне {{ paginator.count }}.

+0

Спасибо, что я изменил свой шаблон '{{object_list.count | default:" 0 "}}' , но это показывает только 25? который представляет собой текущий объект с разбивкой по страницам? –

+0

'count = context ['alllead_list']. Count()' this sollution также дает количество текущих объектов с разбивкой по страницам 25 –

+0

'{{paginator.count}}' работает для меня. он решает мою проблему только в одной строке –