'set' object has no attribute 'count'

在进行搜索功能实现的时候,我用set将building_result和coperation_result两个搜索结果集合在了一起,然后在计算集合的数量时候,报错

AttributeError at /search/
'set' object has no attribute 'count'

from django.shortcuts import render
from myadmin.models import Building
from myadmin.models import Corporation
from django.db.models import Q
# Create your views here.

def index(request):
    ''' 项目前段,企业搜索'''
    return render(request,"web/index.html")

def search(request,pIndex=1):
   search_word = request.GET.get('wd', '')    # 获取到wd这个参数
   building_result = Building.objects.filter(Q(name__contains=search_word))# __contains= 部分匹配
   coperation_result = Corporation.objects.filter(Q(name__contains=search_word))  
   tmp_content_list = set()
   if building_result:
       tmp_content_list = set(building_result)

   # 最后将符合条件的文章标题模型和文章内容模型合并返回
   info_list = set()
   if coperation_result:
       info_list = set(coperation_result)

   # 在从文章标题模型中查找出最终汇总的模型返回
   search_result = info_list.union(tmp_content_list)



   context = {'search_word':search_word,  'search_result':search_result, 'search_result_count':search_result.count()}
   return render(request, 'web/search.html',context)
不知道该怎么该才可以获得计数统计。

该回答引用ChatGPT

修正代码如下:

from django.shortcuts import render
from myadmin.models import Building
from myadmin.models import Corporation
from django.db.models import Q

def index(request):
    ''' 项目前段,企业搜索'''
    return render(request, "web/index.html")
 
def search(request, pIndex=1):
    search_word = request.GET.get('wd', '')    # 获取到wd这个参数
    building_result = Building.objects.filter(Q(name__contains=search_word))
    coperation_result = Corporation.objects.filter(Q(name__contains=search_word))  
    tmp_content_list = list(building_result)
    info_list = list(coperation_result)
    search_result = set(info_list).union(set(tmp_content_list))
    context = {'search_word': search_word, 'search_result': search_result, 'search_result_count': len(search_result)}
    return render(request, 'web/search.html', context)


在这个修正的代码中,我们使用了len()函数来计算集合中的元素数量。此外,我们还使用了列表类型来存储搜索结果,而不是使用集合类型。在最后合并搜索结果时,我们将两个列表转换为集合并进行合并操作。

参考GPT和自己的思路,在Python中,set类型没有count()方法,因此你需要改变一下代码来计算搜索结果集合的数量。

你可以使用Python内置函数len()来获取集合的大小,即集合中元素的个数。将下面这一行代码:

context = {'search_word':search_word, 'search_result':search_result, 'search_result_count':search_result.count()}

修改为:

context = {'search_word':search_word, 'search_result':search_result, 'search_result_count':len(search_result)}

这样就可以获取集合search_result中元素的数量。

可修正如下:

from django.shortcuts import render
from myadmin.models import Building
from myadmin.models import Corporation
from django.db.models import Q
# Create your views here.
 
def index(request):
    ''' 项目前段,企业搜索'''
    return render(request,"web/index.html")
 
def search(request,pIndex=1):
   search_word = request.GET.get('wd', '')    # 获取到wd这个参数
   building_result = Building.objects.filter(Q(name__contains=search_word))# __contains= 部分匹配
   coperation_result = Corporation.objects.filter(Q(name__contains=search_word))  
   tmp_content_list = set()
   if building_result:
       tmp_content_list = set(list(building_result))
 
   # 最后将符合条件的文章标题模型和文章内容模型合并返回
   info_list = set()
   if coperation_result:
       info_list = set(list(coperation_result))
 
   # 在从文章标题模型中查找出最终汇总的模型返回
   search_result = info_list.union(tmp_content_list)
 
 
 
   context = {'search_word':search_word,  'search_result':search_result, 'search_result_count':len(search_result)}
   return render(request, 'web/search.html',context)

你好,我参考了ChatGPT的解答,希望能帮你解决这个问题。
代码报错'set' object has no attribute 'count'是因为Python内置的set类型没有count方法,所以不能直接使用set.count()方法进行计数统计。要解决这个问题,可以通过将set类型转换为list类型,再使用list.count()方法进行计数。

修改后的代码如下:

def search(request,pIndex=1):
   search_word = request.GET.get('wd', '')    # 获取到wd这个参数
   building_result = Building.objects.filter(Q(name__contains=search_word))# __contains= 部分匹配
   coperation_result = Corporation.objects.filter(Q(name__contains=search_word))  
   tmp_content_list = set()
   if building_result:
       tmp_content_list = set(building_result)

   # 最后将符合条件的文章标题模型和文章内容模型合并返回
   info_list = set()
   if coperation_result:
       info_list = set(coperation_result)

   # 在从文章标题模型中查找出最终汇总的模型返回
   search_result = info_list.union(tmp_content_list)

   context = {'search_word':search_word,  'search_result':search_result, 'search_result_count':len(search_result)}
   return render(request, 'web/search.html',context)

上面这段修改后的代码将set类型的search_result转换为list类型,使用len()函数获得list的元素个数,从而实现计数统计。希望能帮到你~