Django 显示通过外键关联的数据库条目数

Django Display count of database entries related via foreign key

我有两个模型,ProjectNotes 和 ProjectNoteComments。 ProjectNoteComments 通过外键与 ProjectNotes 相关。我想在列表视图中显示每条笔记的评论数。我刚刚开始学习 Django,到目前为止我还没有弄清楚如何检索和显示评论数。

我的看法:

(I do import count)

class ProjectNotesList(ListView):
    model = ProjectNotes
    template_name = 'company_accounts/project_notes.html'
    comments = ProjectNotes.comments

    def related_project(self, **kwargs):
        project = get_object_or_404(Project, id=self.kwargs.get('pk'))
        notes = ProjectNotes.objects.all
        return notes

    def get_context_data(self, **kwargs):
        # Call the base implementation first to get a context
        context = super().get_context_data(**kwargs)
        context['project'] = get_object_or_404(Project, id=self.kwargs.get('pk'))
        return context

    commentscount = ProjectNotes.objects.annotate(num_comments=Count('comments'))

我的模板:

{% extends 'base.html' %}

  {% block content %}
  <div class="section-container container">
    <h1>Notes for {{ project }}</h1>
     {% if project.notes.all %}
     {% for note in project.notes.all %}
       <div class ="projectnotes-entry">
         
      <div class="col-sm-8">
       <div class="row-sm-6">
        <div class="card mb-2">
          <div class="card-body">
            <div class="card-title"><a href="{% url 'project_note_detail' project.pk note.pk %}">{{ note.title }}</a></div>
            <div class="card-text">{{ note.body | safe | truncatewords:"20"|linebreaks }}
            <a href="{% url 'project_note_detail' project.pk note.pk %}">read more</a></div>
         </div>
       </div>
      </div>
      </div>     
     </div>
     <h2>comments count</h2>
     {{ commentscount }}
     {% endfor %}
     {% else %}
     <p>No notes have been have been added yet.</p>
     {% endif %}
   </div>
  {% endblock content %}

模特:

class ProjectNotes(models.Model):
    title = models.CharField(max_length=200)
    body = tinymce_models.HTMLField()
    date = models.DateField(auto_now_add=True)
    project = models.ForeignKey(Project, default=0, blank=True, on_delete=models.CASCADE, related_name='notes')

    def __str__(self):
        return self.title

class ProjectNoteComments(models.Model):
    body = tinymce_models.HTMLField()
    date = models.DateField(auto_now_add=True)
    projectnote = models.ForeignKey(ProjectNotes, default=0, blank=True, on_delete=models.CASCADE, related_name='comments')

简短版本:

{{ note.comments.all.count }}    # possibly works also without 'all' but can't check right now

我刚刚用简单的关系解释回答了类似的问题。

看官方文档,很有收获。 https://docs.djangoproject.com/en/4.0/topics/db/models/#relationships