Это больше похоже на много работы / хакерского кода ...
Скажем, у меня есть такие модели:
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
Я чувствую, что это не оптимальный способ, так как существует много перевода данных только для шаблонов. Обычно я пишу методы для модели для тех, которые не требуют никаких аргументов, но как насчет тех, которые делают?