2011-03-29 106 views
0

我的視圖中引用:局部變量 '形式' 之前分配

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 , }) 

回溯:

/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 

回答

0

形式被實例化,只有當request.method == 'POST'。

2

雖然這個問題很老,因爲我遇到了同樣的問題(並解決了它),我想我應該回答以備將來參考。但後來我有一個不同的錯誤。但是你似乎在代碼中缺少某些東西。

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。這是因爲當您嘗試從瀏覽器訪問網址時,您實質上是在對資源執行GET請求。因此,第一個if被違反並直接返回到return聲明,在該聲明中,它試圖返回一個包含'form'的字典項目作爲keyform對象,該對象從來沒有創建過。因此,你的代碼中的錯誤。如果您嘗試在瀏覽器中打開網址,則需要有一個可以實例化form對象的其他部分。我希望這有助於事業。