Wie kann ich Django-Sitzungen verwenden, damit ein Benutzer ein Formular auf einer Seite starten und zur nächsten Seite wechseln kann und das Formular ausfüllen?Django 1.9 mit Django-Sitzungen in zwei Seitenformularen
Ich habe Paginierung und Zauberformulare untersucht, aber ich verstehe sie überhaupt nicht.
Wenn ich eine Seite mit einer kleinen Portion eines Modells habe, die ich benutze - in Formularen - und eine andere Seite mit dem Rest des Modells - forms.py
mit dem Rest der Modellinfo - kann ich die erste Form perfekt verwenden . Wenn ich auf die nächste Seite gehe, erhalte ich die Fehlermeldung (1048, "Column 'user_id' cannot be null")
.
Meine beste Schätzung ist es, Django-Sitzungen zu verwenden, um dieses Problem zu beheben. Ich möchte nicht, dass der Benutzer seinen Benutzernamen und sein Passwort ein zweites Mal eingeben muss, damit dies funktioniert. Irgendwelche Ideen?
meine Modelle/forms.py:
class Contact(models.Model):
user = models.OneToOneField(User)
subject = models.CharField(max_length=100, blank=True)
sender = models.EmailField(max_length=100, blank=True)
message = models.CharField(max_length=100, blank=True)
def __str__(self):
return self.user.username
class UserForm(forms.ModelForm):
password = forms.CharField(widget=forms.PasswordInput())
class Meta:
model = Contact
fields = ('username', 'password', 'email')
class ContactForm1(forms.Form):
class Meta:
model = Contact
fields = ('subject', 'sender')
class ContactForm2(forms.Form):
message = forms.CharField(widget=forms.Textarea)
class Meta:
model = Contact
fields = ('message',)
Ansichten:
def contact(request):
registered = False
if request.method =='POST':
user = UserForm(request.POST)
contact = ContactForm1(request.POST)
if user.is_valid() and contact.is_valid():
user = user.save()
user.set_password(user.password)
user.save()
contact = contact.save(commit=False)
contact.user = user
registered = True
return render(request, 'mysite/contact.html', {'user': user, 'contact': contact, 'registered': registered})
def contact_second(request):
if request.method =='POST':
contact = ContactForm2(request.POST)
if contact.is_valid():
contact = contact.save(commit=False)
contact.save()
return render(request, 'mysite/contact_two.html', {'contact': contact}
würde ich dies in beiden Ansichten setzen? Ich bin mir nicht sicher, wie ich es von einer Ansicht zur anderen senden kann. Ich habe meine Dateien oben hinzugefügt. Vielen Dank! – Robby
@Robby Ich habe meine Antwort aktualisiert. – Rafael
Ich habe es fast. Ich habe die request.session ausgedruckt und von Seite 1 gesehen, was ich bekomme. Alles sieht genau so aus, wie ich es brauche. Nur ich bin nicht sicher, wie man es in der zweiten Seite benutzt, um die user_id zu erhalten. Ich habe 'profile.user = first_page_data ['form_data_page_1']' versucht, aber es hat nicht funktioniert. Danke für all deine Hilfe. Ich bin neu und kämpfe. – Robby