В Django у меня есть много разных отношений между двумя моделями.Как удалить объект из множества во многие для набора запросов без итерации?
Я хочу удалить экземпляр model_one из нескольких экземпляров model_two.
у меня есть:
user = User.objects.get(id=user_id)
conversations = Conversation.objects.filter(users=user)
for conversation in conversations.iterator():
conversation.users.remove(user)
Это необходимо для оценки каждого отдельного экземпляра разговора. Есть ли способ сделать это без итерации?
UPDATE:
Добавлены модели, чтобы добавить ясность в этот вопрос.
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. Я хотел бы сделать следующее:
У меня есть запрос объектов пользователя. Каждый из них имеет поле m2m с цепочками. Каждый элемент в наборе запросов имеет разговор 7 в поле m2m, но также содержит другие разговоры. Я хочу только удалить разговор 7 из m2m каждого объекта в наборе запросов, сохраняя другие разговоры. Все это, без возможности повторения, например,
перед:
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
Почти, но вы получили я к правильному ответу. Спасибо огромное! Если вы положили его как 'convers.users.remove (* users)', он дает мне то, что я хотел –