我无法就我遇到的问题给出正确的标题。我会尝试尽可能多地解释它。
我有2个模特学院和课程。学院与课程有很多关系。我还有一个叫做College_Specific_Course_Details的模型,它有大学和课程作为外键,还有一个名为“费用”的额外属性。
我可以从后端添加大学,课程和college_specific_course_details。在前端我有一个要求,我必须列出特定大学的所有课程及其费用。这是因为即使课程内容相同,特定课程在不同的学院也可能有不同的费用。
我能够在模板中列出带有college.courses.all的课程,但是我在特定大学的课程费用方面遇到了问题。我很困惑,这样做的正确方法是什么?我已经在几个地方读过,不建议通过模板标记传递参数。我无法找到显示它的方法。
我的模板标签是这样的:
<h3>Courses</h3>
{% for course in college.courses.all %}
<li>
<a href="{{ course.get_absolute_url }}">{{ course.title }}
{{ something here should pull the fee of this course in this college }}
</a>
</li>
{% endfor %}
我的模型如下:
class College(models.Model):
title = models.CharField(max_length=200, unique=True, db_index=True)
slug = models.SlugField(max_length=255, unique=True, db_index=True)
courses = models.ManyToManyField(Course)
publish = models.BooleanField(default=True)
class Course(models.Model):
title = models.CharField(max_length=200, db_index=True)
slug = models.SlugField(max_length=255, unique=True, db_index=True)
publish = models.BooleanField(default=False)
class CollegeSpecificCourseDetails(models.Model):
college =ChainedForeignKey(College)
course = ChainedForeignKey(Course)
monthly_fee = models.IntegerField(max_length=10, blank=True, null=True)
答案 0 :(得分:1)
正如@DanielRoseman所说,你真的需要展示你的模特。但听起来你的困惑源于ManyToManyField
和Course
之间的College
以及单独的College_Specific_Course_Details
表。如果我正确理解你,这些都是多余的。相反,请使用through
关键字{/ 1}}使您的M2M表格成为College_Specific_Course_Details
。
它可能看起来像这样:
class Course(models.Model):
# some fields
class College(models.Model):
# some fields
courses = models.ManyToManyField(Course,
through='CollegeCourse',
related_name='colleges')
class CollegeCourse(models.Model)
college = models.ForeignKey(College, related_name='college_courses')
course = models.ForeignKey(Course, related_name='college_courses')
fee = models.IntegerField()
然后你可以像这样迭代:
{% for college_course in college.college_courses.all %}
{{ college_course.course.id }}
{{ college_course.fee }}
{% endfor %}
答案 1 :(得分:0)
好吧保持多对多的场关系,如你所愿:)。 只需循环学习CollegeSpecificCourseDetails对象即可获得大学,课程和费用
college_course = CollegeSpecificCourseDetails.objects.all()
for college_course_detail in college_course:
college = College.objects.filter(id=college_course_detail.college_id)
course = Course.objects.filter(id=college_course_detail.course_id)
fee = college_course_detail.monthly_fee