Djangoセッションを使用して1つのページでフォームを開始し、次のページに移動してフォームを完成させるにはどうすればよいですか?Django 1.9 2つのページフォームでdjangoセッションを使用
ページングとウィザードのフォームを調べましたが、私はそれらをまったく取得しません。
私はモデルの一部を使ってページを作成していますが、モデルの残りの部分にはforms.py
の残りの部分を使用しています - 私は最初のフォームを完全に使用できます。
しかし、次のページに移動すると、エラーが表示されます。(1048, "Column 'user_id' cannot be null")
この問題を解決するには、Djangoセッションを使用することをお勧めします。私は、ユーザーがこれを動作させるためにユーザー名とパスワードをもう一度入力する必要はありません。何か案は?
私のモデル/ 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',)
ビュー:
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}
私はこれを両方のビューに入れますか?あるビューから別のビューに送信する方法がわかりません。上記のファイルを追加しました。ありがとうございました! – Robby
@Robby私は自分の答えを更新しました。 – Rafael
私はほとんどそれを持っています。 Iveはrequest.sessionを印刷し、1ページ目から私が得ているものを見てきました。それはまさに私が必要とするもののように見えます。 user_idを取得するために2番目のページでそれを使用する方法がわかりません。私は 'profile.user = first_page_data ['form_data_page_1']'を試しましたが、動作しませんでした。ご協力いただきありがとうございます。私はこれが初めてで、苦労しています。 – Robby