繁体   English   中英

在 Django 中按降序显示名称和计数

[英]Display name along with the count in descending order in Django

我的 models.py 文件中有两个模型,如下所述:

class Company(models.Model):
  company_name = models.CharField(max_length=100)

  def __str__(self):
    return f"{self.company_name}"

Class Jobs(models.Model):
  job_title = models.CharField(max_length=100)
  job_company = models.ForeignKey(Company, models.on_delete=CASCADE)
  job_location = models.CharField(max_length=50)
  job_salary = models.CharField(max_length=20)

  def __str__(self):
    return f"{self.job_title}"

这些表中的数据如下所示:

  COMPANY
--------------------
|   COMPANY_NAME   |
--------------------
|   Google         |
|   Facebook       |
|   Microsoft      |
|   Amazon         |
--------------------

  JOBS
-------------------------------------------------------------------
|   JOB_TITLE   |  JOB_COMPANY  |   JOB_LOCATION   |  JOB_SALARY  |
-------------------------------------------------------------------
| ENGINEER      | GOOGLE        | SAN JOSE         |  5000        |
| MANAGER       | AMAZON        | NYC              |  8000        |
| DELIVERY MAN  | AMAZON        | WASHINGTON DC    |  2000        |
| ACCOUNTANT    | MICROSOFT     | SFO              |  4000        |
| SALES LEAD    | GOOGLE        | SFO              |  5000        |
| DESIGNER      | GOOGLE        | NYC              |  3500        |
| CHEF          | GOOGLE        | NYC              |  2500        |
-------------------------------------------------------------------

我想在我的模板上显示以下输出:

公司名称以及公司提供的职位数量按降序排列,如下所示。

GOOGLE (4)
AMAZON (2)
MICROSOFT (1)

非常感谢您的时间和帮助!

您可以在查询上使用 Django 的Count聚合来完成此操作。 在你的Views.py做这样的事情:

from django.db.models import Count

queryset = MyModel.objects.all().annotate(count = Count('Google'))
dict1= {}
for each in queryset:
   #print(each.my_charfield, each.count)
   context[each.my_charfield] = each.count 

return render(request, 'some.html', context=dict1)

在模板中访问它就像

{% for key, value in dict1.items %}
     {{key}} ({{value}}) 
{% endfor %}

在 views.py 文件中:

def company(request):
    comp_details = Company.objects.annotate(jobs=Count('job')).order_by('-jobs')[:10]
    return render(request, 'index.html', {'comp_details': comp_details})

在 index.html 文件中:

{% for company in comp_details %}
   {{ company.name }}
{% endfor %}

这将根据前 10 家公司提供的工作数量显示它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM