【问题标题】:How to get the id using a get_context_data?如何使用 get_context_data 获取 id?
【发布时间】:2019-06-09 11:05:56
【问题描述】:

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

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

【问题讨论】:

  • id 是什么?在你的urls?可以分享一下相关网址吗?
  • > 项目 = Project.objects.get(pk=12)。对于每个项目,我想 count() 附加的关注者。

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


【解决方案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 %}

【讨论】:

  • 谢谢。我没有想出使用注释......当然。我添加了 >> queryset = Project.objects.all()
猜你喜欢
  • 2014-03-12
  • 1970-01-01
  • 1970-01-01
  • 2013-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-22
  • 1970-01-01
相关资源
最近更新 更多