如何使用get_context_data获取ID?

时间:2019-06-09 11:05:56

标签: django django-views class-based-views

我想获取模型中使用的附加到模型的追随者总数:

class Project(models.Model):
    owner = models.ForeignKey(User, related_name='project_created_by', on_delete=models.CASCADE)
    name = models.CharField(max_length=100)
    description = models.TextField(max_length=150, blank=True, null=True)
    followers = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='followers', blank=True)
    created = models.DateTimeField(auto_now_add=True)
    last_modefied = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.name

这是班上

class ProjectListView(ListView):
    template_name = 'projectmanagement/project.html'
    context_object_name = 'projects'

    def get_queryset(self):
        queryset = Project.objects.filter(owner=self.request.user).order_by("name")
        return queryset

    def get_context_data(self, *args, **kwargs):
        context = super(ProjectListView, self).get_context_data(*args, **kwargs)
        project = Project.objects.get(pk=12) <-- HERE -->
        context['followers'] = project.followers.filter(followers=project).count()
        return context

1 个答案:

答案 0 :(得分:1)

您可以.annotate(..) [Django-doc] Product的查询集以及关注者数量:

from django.db.models import Count

class ProjectListView(ListView):
    model = Project
    template_name = 'projectmanagement/project.html'
    context_object_name = 'projects'

    def get_queryset(self):
        return super().get_queryset().annotate(
            nfollowers=Count('followers')
        ).filter(
            owner=self.request.user
        ).order_by('name')

现在,上下文数据中的所有项目将具有一个额外的属性nfollowers,其中包含关注者的数量。

例如,您可以使用以下方式呈现此信息:

{% for project in projects %}
    {{ project.name }}, followers: {{ project.nfollowers }}<br>
{% endfor %}