Django ORM множественное внутреннее объединение в запросе

Я хочу иметь возможность делать запросы с несколькими внутренними соединениями, используя Django ORM, вот моя модель (показываю только релевантные поля)

class Students(models.Model):

class Status(models.IntegerChoices):
    preRegistered = 0 #No ha aceptado terminos y condiciones
    Enabled = 1
    Disabled = 2
    Suspended = 3
    Test = 4
id = models.AutoField(primary_key=True)
user = models.ForeignKey(Users, on_delete=models.CASCADE)
trainingPath = models.ForeignKey(trainingPaths, on_delete=models.CASCADE) 
status = models.IntegerField(choices=Status.choices, default=0)
creationDate = models.DateTimeField(auto_now_add=True)
modificationDate = models.DateTimeField(auto_now=True)

class Meta():
    db_table = 'Students'

class trainingPaths(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=70, blank=False, null=False)
shortName = models.CharField(max_length=10, blank=True)
creationDate = models.DateTimeField(auto_now_add=True)
modificationDate = models.DateTimeField(auto_now=True)

class Meta():
    db_table = 'Training_Path'

class Courses(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=70, blank=False, null=False)
path = models.URLField(max_length=500, blank=True, null=True)
shortName = models.CharField(max_length=6, blank=True)
creationDate = models.DateTimeField(auto_now_add=True)
modificationDate = models.DateTimeField(auto_now=True)
course_image = models.URLField(max_length=200, blank=True)

class Meta():
    db_table = 'Courses'

class CoursesXTrainingP(models.Model):
id = models.AutoField(primary_key=True)
trainingPath = models.ForeignKey(trainingPaths, on_delete=models.CASCADE)
course = models.ForeignKey(Courses, on_delete=models.CASCADE)
alternativeName = models.CharField(max_length=70, blank=True)
order = models.PositiveIntegerField(blank=False)
creationDate = models.DateTimeField(auto_now_add=True)
modificationDate = models.DateTimeField(auto_now=True)

class Meta():
    db_table = 'Courses_X_Training_Paths'

Я хочу получить информацию о курсах, которые есть у студента в соответствии со значением "trainingPath".

вот мой SQL запрос

select courses.id, courses.`name`, courses.course_image from students join courses_x_training_paths on students.trainingPath_id = courses_x_training_paths.trainingPath_id join courses on courses_x_training_paths.course_id = courses.id where students.trainingPath_id=1;

Я пробовал несколько способов и ни один из них не сработал, не могли бы вы мне помочь?

Вы можете фильтровать с помощью:

Courses.objects.filter(
    coursesxtrainingp__trainingPath_id=1
)

Соединение на модели Students не является необходимым, так как мы уже знаем, что trainingPath_id является единицей путем фильтрации на модели CoursesXTrainingP.


Примечание: обычно модели Django дается сингулярное имя, поэтому Student вместо Students.


Примечание: обычно имена полей в модели Django записываются в snake_case, а не PascalCase, поэтому должно быть: modification_date вместо modificationDate.

Вернуться на верх