Показать количество внешнего ключа в другой таблице - PullRequest
0 голосов
/ 27 декабря 2018

Я хочу показать количество пользователей в этой компании для всех компаний.Я использую встроенную модель пользователя.

Модель UserProfile

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    user_company = models.ForeignKey(Company, on_delete=models.CASCADE)

Модель компании

class Company(models.Model):
    company_name = models.CharField(max_length=20, unique=True)
    company_description = models.CharField(max_length=100)

Просмотр для отображения Компании

class CompanyListView(LoginRequiredMixin, generic.TemplateView):
    template_name = 'company/company.html'

    def get_context_data(self, **kwargs):   
        context = super(CompanyListView, self).get_context_data(**kwargs)
        context['companies'] = Company.objects.exclude(company_name='Google')
        # Count of Users
        return context

Отображение количества пользователей для каждой компании в одном шаблоне

1 Ответ

0 голосов
/ 27 декабря 2018

Сначала я добавлю атрибут related_name в поле user_company:

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    user_company = models.ForeignKey(Company, on_delete=models.CASCADE, related_name='user_profiles')

Затем в вашем методе get_context_data вам просто нужно annotate() ваш набор запросов следующим образом:

def get_context_data(self, **kwargs):   
    context = super(CompanyListView, self).get_context_data(**kwargs)
    context['companies'] = Company.objects.exclude(
        company_name='Google'
    ).annotate(
        total_users=Count('user_profiles')
    )
    # Count of Users
    return context

Обратите внимание, что вам нужно будет импортировать функцию Count следующим образом:

from django.db.models import Count

Затем в вашем шаблоне вы можете получить доступ к количеству пользователей, как показано ниже:

{% for company in objects %}
    {{ company.total_users }}
{% endfor %}
...