私は、forms.pyでviews.pyで設定されたセッションを呼びたいと思っています。それは可能ですか?Django - views.pyとは別のモジュールでセッションを呼び出す方法は?
私はそれをやろうとしましたが、私は「要請」に関するいくつかの問題に直面しました。
forms.py
from django import forms
class NormalForm(forms.Form):
options = [
('TEST','TEST'),
]
options_normalform = forms.ChoiceField(required=False, choices=options,widget=forms.RadioSelect(attrs={'class':'example_form'}), label='')
class ExampleForm(forms.Form):
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request', None)
super(ExampleForm, self).__init__(*args, **kwargs)
self.option_a = self.request.session['my_session']
self.options_list = [
('a', self.option_a),
('b', 'b'),
('c', 'c'),
]
self.options_form = forms.ChoiceField(required=False, choices=self.options_list,widget=forms.RadioSelect(attrs={'class':'example_form'}), label='')
views.py
from django.shortcuts import render
from .forms import ExampleForm, NormalForm
def example(request):
option_a = '123'
request.session['my_session'] = option_a
normalform = NormalForm
form = ExampleForm(request=request)
context = {
'form': form,
'normalform': normalform,
}
return render(request, 'index.html', context)
テンプレート
<!DOCTYPE html>
<html>
<head>
<title>My App</title>
</head>
<body>
<!-- Header -->
<header>
<h1 id="logo">MY APP</h1>
</header>
<!-- Options form -->
<div id="forms">
<form id="normalform" method="post">
{% csrf_token %}
{{normalform}}
</form>
<form id="form" method="post">
{% csrf_token %}
{{form}}
</form>
</div>
<!-- End of options form -->
<!-- Footer -->
<footer id="main-footer">
<p>Copyright © 2017-2017 | my APP </p>
</footer>
<!-- End of Footer -->
</body>
</html>
私はトンを輸入しようとしないでくださいこの値はフォームと呼ばれるのと同じビューの内部に作成されるため、セッションを作成する代わりに値を設定します。したがって、私は循環的なエラーが発生します。
この値をセッションに保存してからフォームに送信しても、この問題は発生しません。
P.S.私はプログラミングの初心者です。
[編集済み]ビューにテンプレートが見つかるかどうかをテストするためのテンプレートと新しいフォームが含まれていました。
ご回答ありがとうございます。ほんとうにありがとう。私はエラーが発生しています:self.option_a = self.request.session ['my_session'] AttributeError: 'NoneType'オブジェクトに 'session'属性がありません。それが何であるか知っていますか? – Filipe
@Filipeおっと、申し訳ありません - 私の悪い!ビュー関数の 'form = ExampleForm(request)'行を 'form = ExampleForm(request = request)'に置き換えます。それはキーワードの引数でなければなりません。私も答えを更新しました。 – hoefling
問題ありません!もうエラーは出ませんが、フォームは表示されません。それが何であるか知っていますか? – Filipe