もちろん、Django でこれを行う方法があります。
1 つの方法は、値を最後に送信するまでセッションで値を保持することです。前のステップに戻ると、セッションで保持されている値を使用してフォームに入力できます。
いくらか検索すると、誰かが既に作成したアプリケーションで目的の機能を実行できるものを見つけることができますが、Django やその他のフレームワークを使用すると、必要なことを実行するのは難しくありません。
import ステートメントを無視する例:
#models/forms
class Person(models.Model):
fn = models.CharField(max_length=40)
class Pet(models.Model):
owner = models.ForeignKey(Person)
name = models.CharField(max_length=40)
class PersonForm(forms.ModelForm):
class Meta:
model = Person
class PetForm(forms.ModelForm):
class Meta:
model = Pet
exclude = ('owner',)
#views
def step1(request):
initial={'fn': request.session.get('fn', None)}
form = PersonForm(request.POST or None, initial=initial)
if request.method == 'POST':
if form.is_valid():
request.session['fn'] = form.cleaned_data['fn']
return HttpResponseRedirect(reverse('step2'))
return render(request, 'step1.html', {'form': form})
def step2(request):
form = PetForm(request.POST or None)
if request.method == 'POST':
if form.is_valid():
pet = form.save(commit=False)
person = Person.objects.create(fn=request.session['fn'])
pet.owner = person
pet.save()
return HttpResponseRedirect(reverse('finished'))
return render(request, 'step2.html', {'form': form})
step2.html
step1.html に戻るためのリンクがあると仮定します。
ビューで、フォームが保存されたときに設定されたセッションからstep1
値を取得していることに気付くでしょう。fn
前のすべてのステップの値をセッションに永続化する必要があります。ステップの最後で、値を取得し、オブジェクトを作成して、finished
ビューにリダイレクトします。
このコードはどれもテストされていませんが、うまくいくはずです。