1
        for u in Users.objects.all():

            for g in u.group.all():
                if g not in Groups.objects.filter(domain__user=u.id):
                   u.group.filter(id=g.id).delete()

リレーションシップテーブルのエントリを削除するにはどうすればよいですか。この場合、私はグループとユーザーの間に多対多の関係を持っています。上記のコードのdeleteステートメントは、Groupsテーブルからグループを削除します。Users_groupテーブルからユーザーとグループの関係を削除したいだけです。これを行うにはどうすればよいですか。

ありがとう

4

1 に答える 1

4

この問題を考える上で重要なのは、u.group がマネージャーであり、Groups.objects がマネージャーであることを理解することです (デフォルトでは、前者は後者のサブクラスです)。u.group で呼び出すほとんどの操作は、Group テーブル全体に影響します (最初に u に関連するオブジェクトに絞り込む可能性があります)。つまり、g が u に関連していると仮定すると、

u.group.filter(id=g.id).delete()

と同じように動作するはずです

Groups.objects.filter(id=g.id).delete()

どちらの場合も、.filter() はクエリセットを返し (u に関しては完全にナイーブ)、.delete() はすべてのメンバーを削除します。

幸いなことに、u.group は ManyRelatedManager である必要があります。つまり、追加のメソッドを使用できるようになります。多くの例については、こちらを確認してください。あなたのシナリオに合うもの:

u.group.remove(g)
于 2009-03-18T22:01:55.910 に答える