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
我有两个模型,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