Есть ли способ сделать ручное объединение с помощью Django ORM?

Допустим, у меня есть следующие модели:

class ModelA(models.Model):
    pass

class ModelB(ModelA):
    pass

class ModelC(models.Model):
    model_a = models.ForeignKey(ModelA)

class ModelD(models.Model):
    model_c = models.ForeingKey(ModelC)

И мне нужно отфильтровать все экземпляры ModelD, которые имеют отношение в ModelB. Есть ли способ удалить ненужные соединения в запросе, чтобы получился набор запросов?

ModelD.objects.filter(model_c__model_a__model_b__id__isnull=False)

Если есть способ сделать такой фильтр:

ModelD.objects.filter(model_c__model_b__id__isnull=False)

Я знаю, как сделать запрос на SQL, но для удобства чтения и обслуживания кода я хотел бы знать, есть ли способ сделать ручное соединение или удалить это промежуточное соединение.

Заранее спасибо за ответы!

Чтобы это было так, у вас должно быть поле model_b, которое является иностранным ключом для ModelB в модели ModelC. Именно так работает запрос в Django (или любом другом фреймворке, играющем с базами данных).

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