【问题标题】:How to count matches in different querysets如何计算不同查询集中的匹配项
【发布时间】:2020-02-16 23:49:46
【问题描述】:

在对所有模型进行搜索后,我想在模板中计算不同的查询集,但似乎不同的查询集位于列表列表中。

我的视图函数:

class Search(ListView):

template_name='artdb/searchResult.html'

def get_queryset(self): # override get_queryset() has to have that name...

    q=self.request.GET.get('seastr')
    models=[Person,Activity,Member,Comment]
    fields=[l._meta.fields for l in models]
    res=[]

    for i,j in enumerate(models):
        sq=[Q(**{x.name + "__icontains" : q}) for x in fields[i] if not isinstance(x,ForeignKey)]
        res+=[j.objects.filter(k) or None for k in sq]

    res=[k for k in res if k]

    if q:
        return res
    else:
        return Person.objects.none()  # SELECT ... WHERE headline ILIKE '%Lennon%';

def get_context_data(self,*args,**kwargs):

    #q=self.request.GET.get('seastr')
    context=super().get_context_data(*args,**kwargs)     
    context['member']=Member.objects.all()
    return context

上下文字典:

{'page_obj': None, 'view': <artdb.views.Search object at 0x7f415ec88080>, 'is_paginated': False, 'object_list': [<QuerySet [<Person: David Bolander>, <Person: adam something>]>, <QuerySet [<Comment: david bolander comment>]>], 'member': <QuerySet [<Member: 2019-11-21>, <Member: 2020-02-10>]>, 'paginator': None}

我的模板:

{% extends "artdb/index.html" %}

{% block sr1 %}
    <ul>
      <a class="btn btn-light btn-outline-success my-2 my-sm-0" role="button" href="{% url 'artdb:search' %}">
        Persons: {{object_list.count}}
      </a>
      <a class="btn btn-light btn-outline-success my-2 my-sm-0" role="button" href="{% url 'artdb:search' %}">
    Activities: {{activity.count}}
      </a>
      <a class="btn btn-light btn-outline-success my-2 my-sm-0" role="button" href="{% url 'artdb:search' %}">
    Members: {{member.count}}
      </a>
      <a class="btn btn-light btn-outline-success my-2 my-sm-0" role="button" href="{% url 'artdb:search' %}">
    Comments: {{comment.count}}
      </a>
      <br></br>
</ul>
{% endblock sr1 %

从模板中可以看出,我想计算 &lt;a&gt; 标记中的匹配项,但查询集被堆叠为上下文字典中的列表列表。例如,可以计算成员,因为它是后来添加的,并且不在列表列表中。我该如何解决?

【问题讨论】:

    标签: python django templates view django-queryset


    【解决方案1】:

    好的,我找到了解决方案。我在上下文字典中再次插入 object_list:

    def get_context_data(self,*args,**kwargs):
    
            context=super().get_context_data(*args,**kwargs)
    
            c=context['object_list']
            cname=[l.model.__name__ for l in c]
    
            for l in zip(cname,c):
                context[l[0].lower()]=l[1]
    
            return context
    

    这不是最优雅的解决方案,如果其他人有其他解决方案,请分享。

    【讨论】:

      猜你喜欢
      • 2019-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-06
      • 2021-02-03
      • 2013-12-20
      • 1970-01-01
      • 2013-08-13
      相关资源
      最近更新 更多