2016-09-12 3 views
1

У меня есть довольно простая утилита, которая получает открытый веб-заказ, если это ключ сеанса, называемый «orderId», и создаст его, если нет ключа сеанса, а параметр « createIfNotFound 'равно true в функции. Пройдя через него с помощью моего отладчика, я вижу, что фрагмент кода, который устанавливает ключ сеанса после создания заказа, попадает без исключений, но когда я проверяю поле сеанса запроса Http, у него нет этого атрибута ?Django - request.session не сохраняется

Utility

def get_open_web_order(request, createIfNotFound=False): 
    # Check for orderId in session 
    order_id = request.session.get('orderId') 
    web_order = None 

    if None != order_id: 
     try: 
      web_order = WebOrder.objects.get(id=order_id, status='O') 
      logging.info('Found open web order') 
     except WebOrder.DoesNotExist: 
      logging.info('Web order not found') 

    if (None == web_order) and (createIfNotFound == True): 
     logging.info('Creating new web order') 

     web_order = WebOrder() 
     web_order.status = 'O' 

     web_order.save() 
     request.session['orderId'] = web_order.id 

     # Assign logged in user and default billing and shipping 
     if request.user.is_authenticated() and hasattr(request.user, 'customer'): 
      customer = request.user.customer 
      web_order.customer = customer 
      web_order.set_defaults_from_customer() 
      web_order.save() 

    return web_order 

ответ

6

В некоторых случаях вам нужно явно указать сессии, что он был изменен.

Вы можете сделать это, добавив request.session.modified = True на ваш взгляд, после того, как что-то изменить в session

Вы можете прочитать подробнее об этом здесь - https://docs.djangoproject.com/en/1.10/topics/http/sessions/#when-sessions-are-saved

+0

Awesome, что работал. Спасибо ! – JBT

Смежные вопросы