как я могу получить данные из таблицы, которая нравится таблице, которая нравится другой таблице? - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть три таблицы, результат, курс и исследование, они похожи на следующие:

class Study(models.Model):
    id_study = models.IntegerField(primary_key=True)
    study_name = models.CharField(max_length=45)
    description = models.CharField(max_length=45, blank=True, null=True)
    language = models.CharField(max_length=45)
    number_of_years = models.CharField(max_length=45)

class Course(models.Model):
    id_course = models.AutoField(primary_key=True)
    course_name = models.CharField(max_length=45, blank=True, null=True)
    description = models.CharField(max_length=45, blank=True, null=True)
    credits = models.CharField(max_length=45, blank=True, null=True)
    teacher_id_teacher = models.ForeignKey('Teacher', models.DO_NOTHING, db_column='teacher_id_teacher')
    study_id_study = models.ForeignKey('Study', models.DO_NOTHING, db_column='study_id_study')

class Exam(models.Model):
    id_exam = models.AutoField(primary_key=True)
    room = models.CharField(max_length=45, blank=True, null=True)
    resit = models.CharField(max_length=45, blank=True, null=True)
    date = models.DateField(blank=True, null=True)
    time = models.TimeField(blank=True, null=True)
    course_id_course = models.ForeignKey(Course, models.DO_NOTHING, db_column='course_id_course')


class Result(models.Model):
    id_result = models.AutoField(primary_key=True)
    grade = models.IntegerField(blank=True, null=True)
    exam_id_exam = models.ForeignKey(Exam, models.DO_NOTHING, db_column='exam_id_exam')
    date = models.DateField(blank=True, null=True)
    student_id_student = models.ForeignKey('Student', models.DO_NOTHING, db_column='student_id_student')
    passed = models.CharField(max_length=45, blank=True, null=True)

Я хочу получить объект результата в зависимости от Study_id, который я даю

Результат зависит от экзамена , Экзамен зависит от курса, а курс зависит от учебы

Заранее спасибо

1 Ответ

1 голос
/ 22 апреля 2020

Вы можете следить за отношениями в запросах, используя двойное подчеркивание

Result.objects.filter(
    exam_id_exam__course_id_course__study_id_study__id=study_id
)

Для чего оно стоит: у вас есть нечетное соглашение об именах для ваших внешних ключей, обычно это внешний ключ для модели с именем Exam будет иметь имя exam, вы уже устанавливаете db_column для каждого внешнего ключа, поэтому вам не нужно называть их таким образом. Если вы измените их имена, чтобы они стали строчными буквами имени модели, это выглядело бы так, что, вероятно, более читабельно

Result.objects.filter(exam__course__study__id=study_id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...