Как изменить 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