Python 3.5.2
Django 2.0
以下のようなモデルとフォームがある。
class Event(models.Model):
party = models.ManyToManyField(User)
class EventForm(forms.ModelForm):
class Meta:
model = Event
このフォームでオブジェクトを更新しようとしても結果が保存されない。
if request.method == 'POST':
event = get_object_or_404(Event, pk=pk)
form = models.EventForm(request.POST, instance=event)
if form.is_valid():
event = form.save(commit=False)
event.save()
# なぜかフォームで変更した内容が反映されない
save()ではなく、save_m2m()を呼ぶ必要があるらしい。
追記
save_m2m()を呼ぶ必要があるのはform.save(commit=False)の時だけです。form.save()で済む場合は、ManyToManyFieldの更新も保存されます。
http://djangoproject.jp/doc/ja/1.0/topics/forms/modelforms.html