这更多的是感觉像很多工作/ 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 :(得分:0)
您将以任何方式进行数据转换......但如果您想在模板上轻松一点,您可以返回生成器而不是课程和/或学期列表。