Django得到相关的外键字段混乱

时间:2014-06-21 07:44:47

标签: django many-to-many

我无法就我遇到的问题给出正确的标题。我会尝试尽可能多地解释它。

我有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)

2 个答案:

答案 0 :(得分:1)

正如@DanielRoseman所说,你真的需要展示你的模特。但听起来你的困惑源于ManyToManyFieldCourse之间的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