Я пытаюсь научить себя Django и создать простую модель для приложения для включения в список учителей. Существуют курсы (начальная, средняя, средняя школа и т. Д.), Курсы, преподаватели и членство в учебных заведениях.Запрос модели Django с ForeignKey и ManyToMany
Я хочу получить курсы курса & курсы, преподаватели которых подписаны на конкретное членство. В настоящее время я делаю следующее (очевидно, очень плохая практика, но DB очень мал он работает правильно):
course_levels = CourseLevel.objects.prefetch_related('course_set')
# get mainpage teachers
# TODO: This is inefficient, there must be some cool way of doing the same.
for course_level in course_levels:
for course in course_level.course_set.
course.visible_teachers = course.teachers.filter(membership__type=Membership.TYPE_FRONT_PAGE)
А вот models.py
class Teacher(models.Model):
name = models.CharField(max_length=64)
class CourseLevel(models.Model):
name = models.CharField(max_length=64)
class Course(models.Model):
name = models.CharField(max_length=64)
# courses can have levels
level = models.ForeignKey(CourseLevel)
teachers = models.ManyToManyField(Teacher, through='Membership')
class Membership(models.Model):
(TYPE_FRONT_PAGE, TYPE_COURSE_PAGE, TYPE_BASIC) = (1,2,3)
teacher = models.ForeignKey(Teacher, related_name='membership')
course = models.ForeignKey(Course)
MEMBERSHIP_TYPES = (
(TYPE_FRONT_PAGE, _('Front Page')), # Display users on the front page
(TYPE_COURSE_PAGE, _('Course Page')), # Display users on the front of course page
(TYPE_BASIC, _('Basic Membership')), # Display users after
)
type = models.IntegerField(max_length=2, choices=MEMBERSHIP_TYPES)
Что лучший способ для извлечения этих записей , вместо того, чтобы перебирать курсы и получать связанных учителей в Django Query API?
Заранее спасибо.
Итак, вы хотите, чтобы добавить атрибут в ваших 'случаях Course', которые список учителей, введенных в «курс» по типу членства учителя? – Cole