0
私のアプリケーションのユーザーは他のユーザーをブロックすることができ、ブロックされたユーザーはそのアプリケーションのどこにでもブロッカーが表示されません。私は、だから今、私はDjangoは現在ログインしているユーザーをブロックしていないユーザーが返されます、次のクエリを実行しようとしていたモデルDjango ORMマルチカラムへの参加
class User(models.Model):
blocked_users = models.ManyToManyField(
'self', symmetrical=False, through='Block')
class Block(models.Model):
class Meta:
unique_together = ('from_user', 'to_user')
from_user = models.ForeignKey('User', related_name='blocked')
to_user = models.ForeignKey('User', related_name='blocked_by')
を次のようしています。
SELECT *
FROM user
LEFT OUTER JOIN block ON (block.from_user_id = user.id AND block.to_user_id = 1)
WHERE block.id is null
ここで、1
は、現在ログインしているユーザーのIDです。
このクエリセットを除くために、サブクエリを使用するクエリを生成します。これは結合よりもはるかに効率が悪い –
私は今あなたの設定を再現できませんが、ちょうどヒントで答えを更新しました。あなたのM2Mが自己を参照するので、フィルタリングする自己関係を利用できるはずです。 – efkin