Есть ли способ сделать ручное объединение с помощью 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 (или любом другом фреймворке, играющем с базами данных).