2011-09-21 36 views
0

這更多的是什麼感覺像很多的工作/ 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 

我覺得這不是最佳的方式,因爲有很多數據轉換隻是爲了模板而開心。我通常會爲那些不需要任何參數的模型編寫方法,但那些方法呢?

回答

0

您將要麼以任何方式進行數據翻譯......但是如果您希望在模板上使它更容易一些,您可以返回一個生成器而不是課程列表和/或學期。