如何在模板中使用多个1对多关系的Django模型执行嵌套循环

iszxjhcz  于 2023-11-20  发布在  Go
关注(0)|答案(1)|浏览(146)

我在Django中混来混去,以理解框架并有一个数据库模式来建模高尔夫球场数据。我试图将一个简单的视图放在一起,以查看特定高尔夫球场的洞信息。高尔夫球场有1个或多个Tracks,其中包含1个或多个Tee组,每个Tee组有18个具有不同属性的洞(洞数,标准杆,码数等)。我想格式化一个简单的HTML表格,为所有的发球台组组织的每个轨道包含在一个特定的高尔夫球场。* 我有麻烦弄清楚如何在模板中的结构循环,以这种方式格式化数据。*

以下是我的模型:

  1. class GolfCourse(models.Model):
  2. """
  3. This class models the Golf Course Table
  4. """
  5. name = models.CharField(max_length=200)
  6. address = models.CharField(max_length=200)
  7. city = models.CharField(max_length=50)
  8. state = models.CharField(max_length=50)
  9. zipcode = models.CharField(max_length=10)
  10. class Track(models.Model):
  11. """
  12. This class models a Track within a golf course
  13. """
  14. course_id = models.ForeignKey(GolfCourse, on_delete=models.CASCADE)
  15. name = models.CharField(max_length=100)
  16. class Tees(models.Model):
  17. """
  18. This class models a set of Tee markers on a Track
  19. """
  20. track_id = models.ForeignKey(Track, on_delete=models.CASCADE)
  21. name = models.CharField(max_length=50)
  22. rating = models.FloatField()
  23. slope = models.FloatField()
  24. class HoleInfo(models.Model):
  25. """
  26. This class models the information for a hole associated with a Tee
  27. """
  28. tee_id = models.ForeignKey(Tees, on_delete=models.CASCADE)
  29. hole_number = models.SmallIntegerField()
  30. par = models.SmallIntegerField()
  31. handicap = models.SmallIntegerField()
  32. yardage = models.SmallIntegerField()

字符串

以下是我的view函数中的查询:

  1. course_data = HoleInfo.objects.select_related("tee_id__track_id__course_id").filter(tee_id__track_id__course_id=pk)


我能够弄清楚如何访问相关模型对象中的字段,例如与HoleInfo对象相关联的GolfCourse名称,但我遇到的问题是如何访问模板中的迭代器,以便我可以为所有Track,Track中的所有Tee以及每个Tee的所有18个HoleInfo对象创建嵌套循环。

我的模板截图:

  1. ...
  2. <h1>{{ course_detail.tee_id.track_id.course_id.name }}</h1>
  3. {% for track in course_detail.??? %}
  4. {% for tee in ??? %}
  5. <-- Format all 18 hole objects associated with this tee object into a table -->
  6. {% endfor %}
  7. {% endfor %}
  8. ...

qybjjes1

qybjjes11#

以覆盖所需的字段

  1. <h1>{{ course_detail.tee_id.track_id.course_id.name }}</h1>
  2. {% for track in course_detail %}
  3. {{ track.tee_id }}
  4. {{ track.tee_id.name }}
  5. {{ track.tee_id.track_id.name }}
  6. {% endfor %}

字符串

相关问题