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

2024-09-27 21:30:30 发布

您现在位置:Python中文网/ 问答频道 /正文

这是更多的感觉像是大量的工作/黑客代码

假设我有这样一些模型:

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

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


Tags: 模板fieldsfor参数modelmodelsyearclass
1条回答
网友
1楼 · 发布于 2024-09-27 21:30:30

不管怎样,你都要进行数据转换。。。但是如果你想让模板更简单一点,你可以返回一个生成器,而不是课程和/或学期的列表

相关问题 更多 >

    热门问题