локальная переменная «форма», указанная перед присваиванием - PullRequest
0 голосов
/ 29 марта 2011

My View:

def refer(request, seek_id):
    seek_obj = SeekSolutions.objects.get(pk = seek_id)
    if request.method == 'POST':
        form = SeekReferForm(request.POST)
        if form.is_valid():
            obj = form.save(commit = False)
            obj.refferer = request.user
            obj.seek_id = seek_obj
            obj.save()
            send_message(obj)
            return HttpResponseRedirect('/seek/referred')
    return render_to_response('seek/refer.html', {'form' : form , } )

Traceback:

/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/handlers/base.py in get_response
                        response = callback(request, *callback_args, **callback_kwargs) ...
▶ Local vars
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/contrib/admin/options.py in wrapper
                return self.admin_site.admin_view(view)(*args, **kwargs) ...
▶ Local vars
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/utils/decorators.py in _wrapped_view
                    response = view_func(request, *args, **kwargs) ...
▶ Local vars
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/views/decorators/cache.py in _wrapped_view_func
        response = view_func(request, *args, **kwargs) ...
▶ Local vars
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/contrib/admin/sites.py in inner
            return view(request, *args, **kwargs) ...
▶ Local vars
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/utils/decorators.py in _wrapper
            return bound_func(*args, **kwargs) ...
▶ Local vars
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/utils/decorators.py in _wrapped_view
                    response = view_func(request, *args, **kwargs) ...
▶ Local vars
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/utils/decorators.py in bound_func
                return func(self, *args2, **kwargs2) ...
▶ Local vars
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/contrib/admin/options.py in changelist_view
            'selection_note': _('0 of %(cnt)s selected') % {'cnt': len(cl.result_list)}, ...
▶ Local vars
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/query.py in __len__
                self._result_cache = list(self.iterator()) ...
▶ Local vars
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/query.py in iterator
        for row in compiler.results_iter(): ...
▶ Local vars
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/sql/compiler.py in results_iter
        for rows in self.execute_sql(MULTI): ...
▶ Local vars
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/sql/compiler.py in execute_sql
        cursor.execute(sql, params) ...
▶ Local vars
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/backends/util.py in execute
            return self.cursor.execute(sql, params) ...
▶ Local vars
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py in execute
            return Database.Cursor.execute(self, query, params) ...
▶ Local vars

Ответы [ 2 ]

2 голосов
/ 20 июня 2013

Хотя этот вопрос довольно старый, так как я столкнулся с той же проблемой (и только что решил ее), я думаю, что я должен ответить на нее для будущих ссылок. Но тогда у меня была другая ошибка. Но вы, кажется, что-то упустили в своем коде.

def refer(request, seek_id):
seek_obj = SeekSolutions.objects.get(pk = seek_id)
if request.method == 'POST':
    form = SeekReferForm(request.POST)
    if form.is_valid():
        obj = form.save(commit = False)
        obj.refferer = request.user
        obj.seek_id = seek_obj
        obj.save()
        send_message(obj)
        return HttpResponseRedirect('/seek/referred')
else:
    form = SeekReferForm()
return render_to_response('seek/refer.html', {'form' : form , } )

Сюда входит блок else до вашего первого if. Это потому, что когда вы пытаетесь получить доступ к URL-адресу из браузера, вы, по сути, делаете запрос GET к ресурсу. В результате первый if нарушается и напрямую попадает в оператор return, где он пытается вернуть элемент словаря с 'form' в качестве объекта key и form, который вообще никогда не создавался. Таким образом, ошибка в вашем коде. Должна быть еще одна часть, которая должна создавать экземпляр объекта form на случай, если вы попытаетесь открыть URL в вашем браузере. Я надеюсь, что это помогает делу.

0 голосов
/ 29 марта 2011

форма создается только тогда, когда request.method == 'POST'.

...