私はDjangoを使用しており、2つのクラスがあります:
class PR(models.Model):
Jq = models.ForeignKey(JQ)
user = models.ForeignKey(User)
(snip)
def __unicode__(self):
return self.name
class JQ(models.Model):
a = models.ForeignKey(A)
(snip)
def __unicode__(self):
return self.name
指定したユーザーの PR に属さないすべての JQ を取得するクエリを実行したいと考えています。今、私はこれをやっています:
jq = JQ.objects.filter(somefield=someval)
pr = PR.objects.filter(user=request.user.id)
for r in pr:
jq = jq.exclude(id=r.Jq.id)
つまり、すべての JQ を取得してから、特定のユーザーを参照するすべての PR を取得します。すべての PR をループして、少なくとも 1 つの PR によって参照されている JQ を除外しています。しかし、これは恐ろしく非効率的です。助言がありますか?
(ところで、ネイティブ SQL では、おそらくそのユーザーの PR の一時テーブルを作成し、その一時テーブルを JQ と結合して、ユーザーの PR に一致しない行のみを保持します。)
ご協力ありがとうございました!