繁体   English   中英

如何在 Django 模板中渲染多对多字段数据

[英]How to render many to many field data in Django template

我能够呈现所有课程的列表以及与不同模板中的课程相对应的主题列表。

我需要帮助来查看所有课程的列表,当每门课程被点击时,一个新页面应该显示相关主题的列表


模型.py

class Topic(models.Model):

  topic_name = models.CharField(max_length=200, null=True)
  topic_file = models.FileField(upload_to = "topic_file", blank=True, null=True)

  def __str__(self):
        return self.topic_name

class Course(models.Model):
  course_name = models.CharField(max_length=200, null=True)
  course_image = models.ImageField(upload_to="images", blank=True, null=True)
  related_topic = models.ManyToManyField(Topic)
 
  def __str__(self):
        return self.course_name

视图.py

def view_course(request):
  course_list = Course.objects.all()
  context = {'course_list':course_list}
  return render(request, 'upskill/view_course.html',context)

def course_topic(request,pk):
  course_topic_list = Course.objects.get(id=pk)
  var = course_topic_list.related_topic.all 
  context = {'var':var}
  return render(request, 'upskill/course_topic.html',context)

以下是如何在模板中获取相关主题。

{% for course in course_list %}
    ... data
    {% for topic in course.related_topic.all %}
        ...data
    {% endfor %}
{% endfor %}

如果您不想在{{course}}循环的每次迭代中都进行查询,我建议您在视图中这样做:

course_list = Course.objects.all().prefetch_related('related_topic')

对于单个 object:

def course_topic(request,pk):
  course = Course.objects.prefetch_related('related_topic').get(id=pk)
  context = {'course ':course }
  return render(request, 'upskill/course_topic.html',context)

然后在模板中:

{{course.data...}}
{% for topic in course.related_topic.all %}
    ...data
{% endfor %}

只有主题:

def topic_view(request, pk)
    topics = Topic.objects.filter(course__pk=pk) #The reverse name of Course model.
    # You can set a related name the "related_topic" field. 
    # Then access the above filter with that related name.
    .... data
    context = {
        "topics":topics 
    }
    return render(request, 'template.html', context)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM