2011-03-29 95 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对象的其他部分。我希望这有助于事业。

相关问题