如何使用 get_context_data 获取 id?

How to get the id using a get_context_data?

我想获得模型中使用的模型的关注者总数:

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

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

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

from django.db.models import <b>Count</b>

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

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

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

因此,您可以使用以下方式渲染:

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