Чтобы сделать мой вопрос более понятным, вот пример.Django: Можно ли достичь того же, что и sql существует?
Есть две модели:
class A(models.Model):
name = models.CharField(max_length = 10)
class B(models.Model):
a = models.ForeignKey(A)
name = models.CharField(max_length = 10)
Таким образом, в этом примере, A и B являются одной-к-многим. Теперь предположим, что я хотел бы сделать следующий запрос: найти A, у которого есть хотя бы один B как дочерний. В sql, очевидно, я должен использовать условие существования. Можно ли добиться того же результата с ормом?
Я провел некоторое исследование по этому вопросу, но не могу найти идеальное соответствие запросу sql. Наиболее близким решением является как:
A.objects.filter(b__pk__gt = 0).distinct()
Но это еще далеко не существует пункт в SQL и не может быть столь же эффективным, как существует.
Итак, с b__isnull = False, мне больше не нужно добавлять четкие выражения? И это условие bona fide exists в sql? –
Вам не нужен отдельный, но я не уверен, какой запрос он выполняет точно. Это, однако, лучшее, что вы собираетесь делать с ORM Django. В противном случае просто используйте SQL-запрос с 'raw'. –
Получите правильный ответ, прежде чем уходить с пути для оптимизации. Если вы действительно должны смотреть под обложками SQL-запроса ORM: 'import django; django.db.connection.queries' из './manage.py shell'. – istruble