Идеальный способ передать отфильтрованные отношения модели к шаблону? - PullRequest
0 голосов
/ 22 сентября 2011

Это больше похоже на много работы / хакерского кода ...

Скажем, у меня есть такие модели:

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 голосов
/ 22 сентября 2011

Вы будете переводить данные в любом случае ... но если вы хотите немного упростить шаблон, вы можете вернуть генератор вместо списка курсов и / или семестров.

...