Поле 'id' ожидало число, но получило объект <>ManyRelatedManager

Я пытаюсь удалить поле в отношениях "многие ко многим", но столкнулся с этой ошибкой и не знаю, как ее решить/исправить.

Вот что я пытаюсь сделать:

1: Перед приведенными ниже представлениями я получаю действительный POST от пользователя, идентифицирующего data.log_order

2: Я ищу, есть ли предыдущие журналы в ActiveSession. Если есть, то ищу совпадающие журналы с одинаковыми полученными данными data.log_order и удаляю существующие и добавляю новые полученные данные.

3: Если нет совпадения data.log_order в журнале или предыдущих журналах, добавить новые полученные данные.

Насколько проста логика, настолько же сложна, насколько я пытаюсь исправить свои ошибки.

class Log(models.Model):
    ...................................
    log_order = models.IntegerField(validators=[MinValueValidator(1)],blank=True, null=True)

class LogForm(forms.Form):
    .............................
    log_order = forms.IntegerField()

class ActiveSession(models.Model):
    log = models.ManyToManyField(Log, related_name='savedlogs')
    ..................................

Вот мнения:

                if active_session.log.values():
                    print(active_session.log.values())
                    for i in active_session.log.values():
                        if i['log_order']==int(data.log_order):
                            log_order = data.log_order
                            log=Log.objects.filter(log_order=log_order)
                            print(log)
                            active_session = ActiveSession.objects.get(id=ActiveSession.objects.last().id,log__in=log)
                            print(active_session)
                            active_session.log.remove(active_session.log)
                            active_session.log.add(data)
                            print(active_session.log.values())
                        else:
                            active_session.log.add(data)
                            print(active_session.log.values())
                            print('Existing Log with different order_no')
                else:
                    active_session.log.add(data)
                    print('Log added to Session')
                    print(active_session.log.values())
                return HttpResponseRedirect(url)

Вот трассировка:

Следующая строка кода является причиной ошибки:

active_session.log.remove(active_session.log)

Как указано в remove документации:

Для отношений "многие-ко-многим" remove() принимает либо экземпляры модели, либо значения полей в качестве аргумента *objs. либо значения полей, обычно первичные ключи, в качестве аргумента *objs.

То, что вы передаете в remove - это менеджер поля "многие-ко-многим", а не один или несколько объектов.

Я не совсем уверен, какие объекты вы пытаетесь удалить из поля m2m, но если вы хотите удалить их все, вам следует либо использовать:

active_session.log.remove(active_session.log.all())

ИЛИ

active_session.log.clear()

Если вы хотите удалить только единичный объект, вам следует передать объект Log:

active_session.log.remove(log)
Вернуться на верх