Отображаемое имя вместе со счетчиком в порядке убывания в Django - PullRequest
0 голосов
/ 11 марта 2020

У меня есть две модели в моем файле 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)

Большое спасибо за ваше время и помогите!

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

Внутри файла 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})

Внутри индекса. html file:

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

Это отобразит список 10 крупнейших компаний на основе количества вакансии, предлагаемые ими.

0 голосов
/ 11 марта 2020

Вы можете использовать Django Count агрегат в наборе запросов для выполнения sh этого. В вашем 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 %}
...