Как изменить manytomanyfield в форме в django?

Мне интересно, как можно изменить значение поля типа "многие-ко-многим" в форме django. Предпочтительно, я хотел бы изменить значение внутри def form_valid моего Modelview. Вот часть form_valid в моем представлении, с которой у меня проблемы:

lesson = Lesson.objects.all().first()

for i in lesson.weekday.all():
    form.instance.weekday.add(i)
    form.instance.save()

Здесь weekday является полем "многие-ко-многим". Однако форма сохраняет "отправленные" пользователем значения weekday, а не измененные, как показано в приведенном выше коде. Интересно, что приведенный ниже код работает, хотя это не поле "многие-ко-многим":

form.instance.name = lesson.name
form.instance.save()

Спасибо, и, пожалуйста, оставляйте любые вопросы, которые у вас есть.

Я подозреваю, что вы выполняете код до вызова метода super. Код в суперметоде может выглядеть следующим образом:

def form_valid(self, form):
    self.object = form.save()
    return super(ModelFormMixin, self).form_valid(form)

При выполнении form.save() очищает все значения, связанные с ManyToMany, и устанавливает значения формы.

Возможно, вам нужно запустить свой код после вызова суперметода:

def form_valid(self, form):
    # some code here...
    return_value = super(MyView, self).form_valid(form)
    lesson = Lesson.objects.all().first()
    for i in lesson.weekday.all():
        self.object.weekday.add(i)
        # self.object.save() # Dont need call save here

    return return_value

Вернуться на верх