在Django中,我有兩個模型之間的多對多關係。如何在沒有迭代的情況下從查詢集中的多對多中刪除對象?
我想從model_two的幾個實例中移除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'
更新2:
我想我的問題是不清楚。 clear()方法刪除m2m字段中的所有項目。我想要做的是以下幾點:
我有一個用戶對象的查詢集。每個人都有一個有對話的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]
你可以把你的模型定義 – iklinac
這是在Django一對多的關係很多的另一端,你應該使用以下 – iklinac
差不多,但你有我向正確的答案。非常感謝! 如果你把它作爲'conversation.users.remove(*用戶)'它給了我我想要的東西 –