既存の行を更新するのではなく、新しい行を挿入する Django コードに問題があります。instance
ここにいる多くの人が同様の問題について助けを求めてきましたが、通常は のように設定することを忘れていますform = SomeModelForm(request.POST or None, instance=some_model_instance)
。私はそれを正しくやっているようですが、それでも既存のデータを保存しません。
もう1人のポスターにはまったく同じ問題がありました(UPDATE にしたい場合は Django form INSERTsを参照してください)。問題を解決するために彼に与えられたコードが問題を解決したようですが、彼が尋ねたときになぜそれが機能したのか誰も説明しませんでした!
見る
if form_type == "edit_event":
# we need to load all the data based on the event_id
event_id = request.POST['event_id'] or None
event_to_edit = mapDataManager.getEvent(event_id)
if event_to_edit and mapDataManager.userCreatedEvent(request.user, event_to_edit):
# this user actually created this event
# let them edit it
event_form = EventModelForm(request.POST or None, instance=event_to_edit)
location_form = LocationModelForm(request.POST or None, instance=event_to_edit.location)
list_of_event_scheds = EventSchedule.objects.filter(pk=event_id).values()
event_sched_formset = EventScheduleModelFormSet(request.POST or None, initial=list_of_event_scheds)
if event_form and location_form and event_sched_formset:
if event_form.is_valid() and location_form.is_valid() and event_sched_formset.is_valid():
# update event
mapDataManager.updateEvent(event_form, location_form, event_sched_formset)
# redirect
return HttpResponseRedirect(reverse('map'))
else:
# set feedback to show edit event form
feedback = "edit_event"
updateEvent()
def updateEvent(self, event_form, location_form, event_sched_forms):
event = event_form.save(commit=False)
location = location_form.save()
event.location = location
event.save()
for event_sched_form in event_sched_forms: # loop through formset
event_sched = event_sched_form.save(commit=False)
event_sched.event = event
event_sched.save()
誰でも私を助けることができますか?本当に基本的なものが欠けていますか?
編集:明確にするために、私のフォームはどれも更新されておらず、すべてが挿入されていました。ダニエルの提案に基づいて、フォームセットを使用して、編集中の 3 つのモデルフォームすべてをリンクする必要があると思います。