1

サイトでセッションを使用したい。settings.py ファイルで次の設定を行いました。

 'django.contrib.sessions', #in the installed apps

SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'

'django.contrib.sessions.middleware.SessionMiddleware', # in the midlleware classes

コードを見る

def apartamente(request):
    form = SearchFormApartamente()
    execute_form_process = 0
    if request.method == 'POST':
        form = SearchFormApartamente(request.POST)
        execute_form_process = 1
        request.session['apartamente'] = form
        request.session['vasea'] = True
        request.session.set_expiry(300)
        request.session.modified = True
    elif 'apartamente' in request.session:
        form = searchFormApartamente(request.session['apartamente'])
        execute_form_process = 1

# forms.py
class SearchFormApartamente(forms.Form):
    thewidget = ColumnCheckboxSelectMultiple()
    category = forms.ModelMultipleChoiceField(
        queryset=Categorie_Oferta.objects.filter(id__in=[1,2,3,4]),
        required=False)
    sector = forms.ModelMultipleChoiceField(queryset=Sector.objects.all(),
        widget=forms.widgets.CheckboxSelectMultiple, required=False)
    min_price = forms.IntegerField(required=False,
        widget=forms.widgets.Input(attrs={'class': 'rounded'}))
    max_price = forms.DecimalField(required=False)

しかし、問題は、セッションにフォームを保存しようとすることです.2回目にビューに入ってsessiomから値を読み取ろうとすると、セッションが空になります.何が問題になるのでしょうか? 前もって感謝します!

4

1 に答える 1

1

apartamenteフォームのフィールドであると仮定して、以下に示すようにビューコードを書き直します。

# I know it doesn't affect scoping, but I don't like having the view name
# the same as a model or anything else for sanity

def apartamente_view(request):
    apartamente = request.session.get('apartamente', None)
    form = SearchFormApartamente(request.POST or None,
        initial={'apartamente': apartamente})

    execute_form_process = 0
    if request.method == 'POST':
        if form.is_valid():
            execute_form_process = 1
            request.session['apartamente'] = form.cleaned_data['apartamente']
            request.session['vasea'] = True
            request.session.set_expiry(300)

            # do you really need this?
            request.session.modified = True
            ...
于 2013-03-15T11:02:29.507 に答える