Ovviamente c'è un modo per farlo in Django.
Un modo è quello di mantenere i valori in sessione finché non li si invia alla fine. È possibile popolare i moduli utilizzando i valori trattenuti in sessione se si ritorna al passaggio precedente.
Con un po 'di ricerca, potresti trovare un'app che qualcuno ha già scritto che farà ciò che vuoi, ma fare ciò che ti serve non è difficile da fare con Django o qualsiasi altro framework.
esempio, ignorando le istruzioni 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})
Supponiamo che step2.html
ha un link per tornare alla step1.html.
Nella vista step1
notificherò il valore per fn
dalla sessione impostata al momento del salvataggio del modulo. Dovresti mantenere i valori di tutti i passaggi precedenti nella sessione. Alla fine della procedura, acquisisci i valori, crea i tuoi oggetti e reindirizza a una vista finished
, qualunque essa sia.
Nessuno di questo codice è stato testato, ma dovrebbe farti andare.
Sapete perché questa soluzione utilizzando il modulo Wizard non funziona? http://stackoverflow.com/questions/14860392/django-formwizards-how-to-painlessly-pass-user-entered-data-between-forms –
In realtà non ho mai usato il wizard dei form in Django, e ho ha lavorato con esso dal 0.96, ma a quanto pare l'OP su quella domanda non ha mai trovato la risposta. – Brandon
Questo OP ero io :) –