将模型的过滤关系传递给模板的理想方法?

时间:2011-09-21 22:30:53

标签: python django django-templates

这更多的是感觉像很多工作/ hackish代码......

说我有这样的模特:

class Semester(models.Model):
     year = models.IntegerField()
     month = models.IntegerField()
     # ... some fields

class Course(models.Model):
     semesters = models.ManyToManyField(Semester)
     # ... some fields

class Section(models.Model):
     semesters = models.ManyToManyField(Semester)
     course = models.ForeignKey(Course, related_name='sections')
     # ... more fields

所以,对于一个视图,我正在按学期提取课程列表。但我也想列出一个学期的课程部分。这造成了一个两难的境地:我该把它放在哪里?我不能在模板中做到这一点(因为模板不能真正处理带参数的方法)而且我一直在做这样的事情:

def view(request, year, month):
    # for simplicity, no error handling
    semester = Semester.objects.get(year=year, month=month)
    courses = []
    for c in Course.objects.filter(semesters=semester):
        courses.append({
            'semesters': c.semesters.all(),
            # repeat for every course field
            'sections': c.sections.filter(semesters=semester),
        })
    # render template with courses variable

我觉得这不是最佳方式,因为有很多数据转换只是对模板很开心。我通常会为那些不需要任何参数的方法编写模型的方法,但那些方法呢?

1 个答案:

答案 0 :(得分:0)

您将以任何方式进行数据转换......但如果您想在模板上轻松一点,您可以返回生成器而不是课程和/或学期列表。