【问题标题】:Display name along with the count in descending order in Django在 Django 中按降序显示名称和计数
【发布时间】:2020-03-10 22:16:30
【问题描述】:

我的 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)

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

【问题讨论】:

    标签: python django django-models django-views django-templates


    【解决方案1】:

    您可以在查询集上使用 Django 的 Count aggregation 来完成此操作。在您的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 %}
    

    【讨论】:

      【解决方案2】:

      在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 位的公司,基于他们提供的工作数量。

      【讨论】:

        猜你喜欢
        • 2020-12-26
        • 1970-01-01
        • 2023-04-11
        • 2023-01-09
        • 1970-01-01
        • 1970-01-01
        • 2020-10-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多