私の質問をもっと分かりやすくするために、ここに例があります。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は、1対多の関係です。さて、私は次のクエリをしたいとしましょう:少なくとも1つのBを子として持つAを見つける。 SQLでは、明らかにexists節を使うべきです。 ormでまったく同じことを達成することは可能ですか?
私はそれについていくつかの調査をしましたが、SQLクエリに完全に一致するものは見つかりませんでした。最も近い解決策は次のようなものです:
A.objects.filter(b__pk__gt = 0).distinct()
しかし、それはsqlのexist節からまだ遠く、存在するほど効率的でないかもしれません。
したがって、b__isnull = Falseの場合、もはや別名を追加する必要はありません。それはsqlの正当な存在節ですか? –
あなたは区別する必要はありませんが、どのクエリが正確に実行されるか分かりません。しかし、あなたはDjango ORMを使うのが一番です。それ以外の場合は、 'raw'で必要なSQLを直接使用してください。 –
あなたが最適化するために外出する前に、正しい答えを得てください。あなたが本当にORMのSQLでカバーの下を見なければならないなら、 'import django; django.db.connection.queries'を './manage.py shell'から削除します。 – istruble