Djangoモデルの作成または更新に同じフォームを使用しようとしています。残念ながら、識別子がNone
の場合、他の回答で提案されているupdate_or_create()
メソッドは機能しません。現在、id
がNone
であるかどうかをチェックしています。ModelForm
を取得し、必要に応じて別々のコードフローでオブジェクトを作成または更新しています。ここでIDフィールドに基づいてDjangoモデルを作成または更新します
は私のコードです:私は、コードの重複を避けることができますどのように
# When the Conquest already exists
if c_id is not None:
# Check if Conquest is valid, else throw error
conq = get_object_or_404(Conquest,id=c_id)
# Verify ModelForm data based on existing instance
form = ConquestForm(request.POST,instance=conq)
if not form.is_valid():
print form.errors
return json_response(messages='Invalid form data')
conq.title=form.cleaned_data['title']
conq.description=form.cleaned_data['description']
conq.start_time=form.cleaned_data['start_time']
conq.end_time=form.cleaned_data['end_time']
conq.save()
return JsonResponse({'success':'true','message':'Conquest updated'},status=200)
else:
# Verify ModelForm data based
form = ConquestForm(request.POST)
if not form.is_valid():
print form.errors
return json_response(messages='Invalid form data')
conq = Conquest.objects.create(
title=form.cleaned_data['title'],
description=form.cleaned_data['description'],
start_time=form.cleaned_data['start_time'],
end_time=form.cleaned_data['end_time'])
return JsonResponse({'success':'true','message':'Conquest created'},status=200)
:instance
なし/でform
オブジェクトを作成するには
は別の持って
を指定しましたIDが作成中で更新中のコードは
null
instance=conq
を指定しないと、title
が一意でなければならないため、整合性エラーが発生します。