Djangoでは、私は2つのモデルの間に多対多の関係があります。繰り返しを使わずにクエリーセットのオブジェクトを多対多から削除するにはどうすればよいですか?
model_toneの複数のインスタンスからmodel_oneのインスタンスを削除します。
私が持っている:
user = User.objects.get(id=user_id)
conversations = Conversation.objects.filter(users=user)
for conversation in conversations.iterator():
conversation.users.remove(user)
これは会話のすべての単一のインスタンスを評価する必要があります。繰り返しなしでこれを行う方法はありますか?
更新日:
質問を明確にするモデルを追加しました。
class User(EditMixin):
conversations = models.ManyToManyField('Conversation', related_name='user_conversation')
name = models.CharField(max_length=255, blank=True, null=True)
permalink = models.URLField(blank=True, max_length=2083)
rating = models.DecimalField(decimal_places=2, max_digits=4, blank=True, default=0)
remote_id = models.CharField(max_length=4096, blank=True, null=True)
summary = models.CharField(max_length=255, blank=True, null=True)
objects = UserManager()
class Meta:
verbose_name_plural = 'Users'
class Conversation(EditMixin, BasicInfoMixin):
content = models.TextField(blank=True, null=True)
update_enabled = models.BooleanField(default=False)
objects = ConversationManager()
class Meta:
verbose_name_plural = 'Conversations'
UPDATE 2:
私は私の質問は不明だと思います。 clear()メソッドは、m2mフィールド内のすべての項目を削除します。私がしたいのは以下の通りです:
私はUserオブジェクトのクエリーセットを持っています。それぞれには会話のあるm2mフィールドがあります。クエリーセット内のすべてのアイテムは、m2mフィールドに対話7がありますが、他の会話も含まれています。他の会話を維持しながら、クエリーセット内のすべてのオブジェクトのm2mから会話7を削除したいだけです。可能であれば、これをすべて繰り返します。
前:
Jeremy.conversations:[1、2、3、4、7]
Tiffany.conversations:[3、7、9]
Jeff.conversations:[5 、6、7]
後:
Jeremy.conversations:[1、2、3、4]
Tiffany.conversations:[3]、[9]
Jeff.conversations:[5、6]
を削除する.through使用し、あなたのモデル定義に入れることができ – iklinac
それはとてもあなたがほとんど – iklinac
を以下使用する必要がありますジャンゴには多くの関係に多くの他の終わりですが、得ました私は正しい答えに私。どうもありがとうございます! あなたが 'conversation.users.remove(* users)'としてそれを置くと、それは私に欲しいものが与えられます –