2015-11-27 16 views
0

我有一個視圖,它根據傳入的技能從數據庫中提取多個用​​戶。它幾乎可以根據需要工作,除非它返回多個用戶,否則它只返回最近提取的用戶。如何彙總提取的用戶以傳回模板。我嘗試將它們作爲列表傳回,但它們沒有出現。返回多個提取的用戶

這裏是我的代碼:

form = FilterFreelancerForm(request.POST) 
     filtered_skills = set((request.POST.getlist('skills_select'))) 

     match_fl = Freelancer.object.annotate(c=Count('skills')).filter(c=len(filtered_skills)) 
     candidate_freelancers = None 

     for skill in filtered_skills: 
      candidate_freelancers = match_fl.filter(skills=skill) 

     freelancers = None 

     for freelancer in candidate_freelancers: 
      freelancers = User.objects.filter(freelancer=freelancer.id) 

    return render(request, 'freelancestudent/browsefreelancers.html', {'freelancers': freelancers, 
                     'filter_form': form}) 

我以前有這樣的:

freelancers = [] 

    for freelancer in candidate_freelancers: 
     freelancers.append(User.objects.filter(freelancer=freelancer.id)) 

返回無關的模板。

+1

您還沒有一個列表都做了什麼;你已經定義了一個單獨的變量'freelancers',每次遍歷循環都會覆蓋它。出於同樣的原因,'candidate_freelancers'只包含具有來自filtered_skills的最終技能的自由職業者。 –

+0

我已經添加了包含該列表的代碼,因爲您沒有聽我說過我曾試過它,所以沒有做任何事情。 – Nanor

+0

你不明白,在for循環中,'candidate_freelancers = match_fl.filter(skills = skill)'是將一個項目分配給變量'candidate_freelancers'。它應該是一個「列表」,並用'candidate_freelancers.append(match_fl.filter(skills = skill))來更改該行。' – tglaria

回答

1

相反的:

for freelancer in candidate_freelancers: 
    freelancers = User.objects.filter(freelancer=freelancer.id) 

嘗試:

freelancers = User.objects.filter(freelancer__in=[freelancer.id for freelancer in candidate_freelancers]) 

出來:

[<User: user1>, <User: user2>]