2013-04-23 37 views
1

在Django中,我需要过滤数据并显示结果。例如过滤数据并按no排序显示结果。的职位

Company3(20) 
Company1(12) 
Company2(3) 

这里“公司1,Company2的,公司3”是公司名称和括号内“20,12,3”都没有。由特定公司发布的工作。

models.py 

class User(models.Model): 
    first_name= forms.CharField(max_length=30,widget=forms.TextInput()) 
    last_name = forms.CharField(max_length=30,widget=forms.TextInput()) 
    username = forms.CharField(max_length=30,widget=forms.TextInput()) 
    email = forms.EmailField(widget=forms.TextInput()) 
    password = forms.CharField(widget=forms.PasswordInput()) 
    companyname = forms.CharField(max_length=30,widget=forms.TextInput()) 

class jobs(models.Model): 
    emp = models.ForeignKey(User, unique=False) 
    title = models.CharField(max_length=30) 
    referencecode = models.CharField(max_length=30) 
    jobsummary = models.TextField() 
    jobdetails = models.TextField() 
    key_skills = models.CharField(max_length=30) 

我试着给views.py就像

def search_result(request): 

    details=User.objects.filter(jobs__isnull=False).select_related() 
    return render_to_response('searchresult.html', {'details': details}) 

templates 
<ul> 
{% for d1 in details %} 
<li>{{ d1.companyname }}({{ d1.count }})</li> 
{% endfor %} 
</ul> 

给一些想法,像上面

回答

1

也许更有效的看起来像

details = User.objects.filter(jobs__isnull=False).annotate(job_count=Count('jobs'))\ 
        .order_by('job_count') 

,然后在模板中

<ul> 
{% for d1 in details %} 
    <li>{{ d1.companyname }}({{ d1.job_count }})</li> 
{% endfor %} 
</ul> 
1

您应该使用d1.jobs_set.count代替,得到的职位数显示结果。

所以更新您的模板:

<ul> 
{% for d1 in details %} 
    <li>{{ d1.companyname }}({{ d1.jobs_set.count }})</li> 
{% endfor %} 
</ul> 
+0

它显示相同的输出 – Karthik 2013-04-23 05:17:34

+0

输出 公司1() 公司1() Company2的() 我张贴2个作业为公司1和1 Company2的 – Karthik 2013-04-23 05:19:13

+0

喔,它应该是'{{d1.jobs_set.count}}',我建议误'd1.emp_set '。 – Rohan 2013-04-23 06:17:07

0

你真的应该有一个Company模型;这可以在aggregation api的帮助下完成这个简单的任务;但对于你的情况,你需要做的是在您的视图:

from collections import defaultdict 

from django.shortcuts import render 

def search_result(request): 

    company_count = defaultdict(int) 
    for obj in User.objects.filter(jobs__isnull=False).select_related(): 
     company_count[obj.companyname] += 1 

    return render(request, 'searchresult.html', {'details': company_count}) 

您的模板将成为:

{% for company_name in details %} 
    {{ company_name }}({{ details.company_name }}) 
{% endfor %}