Я работал в течение многих часов, пытаясь понять следующую проблему: Я сделал, чтобы пользователь отправил запрос Ajax для динамичной отправки формы и записи, которую увеличило количество форм для чтения на представлении. К этому концу я использую request.session['editing_foo'] = { 'prefix_of_form_elements' : pkey }
так, чтобы я мог связать их с базой данных для сохранения, и загрузка (-1 для новых форм, которые еще не были сохранены).
Однако, когда я использую следующий код (см. нижнюю часть), я получаю следующий причудливый вывод:
1-й Щелчок:
{} foousername
next_key 1
1
{u'1-foo': -1}
2-й Щелчок:
{} foousername
next_key 1
1
{u'1-foo': -1}
3-й Запрос:
{} foousername
next_key 1
1
{u'1-foo': -1}
Какого черта продолжается?
id_fetcher = re.compile(r'\d')
@login_required
def ajax_add_foo(request):
def id_from_prefix(key):
return int( id_fetcher.search(key).group(0) )
if 'editing_foos' not in request.session:
print "reinitializing"
request.session['editing_foos'] = {}
print request.session['editing_foos'], request.user
keys = request.session['editing_foos'].keys()
if len(keys) == 0:
next_key = 1
else:
print [ id_from_prefix(key) for key in keys ]
next_key = max([ id_from_prefix(key) for key in keys ]) + 1
print "next_key", next_key
fooform = FooForm(prefix=next_key)
print next_key
request.session['editing_foos'].update( {create_prefix(FooForm, next_key) : -1 } ) # This quote is new and has no pkey
print request.session['editing_foos']
return render_to_response( 'bar/foo_fragment.html',
{'fooform' : fooform, },
context_instance=RequestContext(request))
Всем большое спасибо!
Примечание: Это - продолжение предыдущего вопроса относительно того же исходного кода.
Я не думаю, что полностью понимаю вопрос, но вы можете посмотреть, какой механизм сеанса вы используете
, если вы используя механизм сеанса кеширования, вам необходимо убедиться, что у вас правильно настроено кеширование (например, фиктивный кеш просто выбрасывает данные вашего сеанса)
другая возможность заключается в том, что ваш сеанс не сохраняется, потому что вы не меняете в сеансе вы меняете изменяемый объект, который хранится в сеансе. вы можете попробовать принудительно сохранить сеанс , добавив это где-нибудь в вашем представлении:
request.session.modified = True