2016-11-07 29 views
0

我是Python新手,目前正在尝试调试一些Python代码。类的python过滤器实例

我有目前这样定义的视图:

def get_current_budget(project_id, prefetch=False): 
""" Find budget by empty version number, or if none, check whether there is one with a current marker """ 

    if prefetch: 
     project = Project.objects.prefetch_related('budget_versions', prefetch).get(id=project_id) 
    else: 
     project = Project.objects.prefetch_related('budget_versions').get(id=project_id) 

    try: 
     #budget = project.budget_versions.get(version_number=None) 
     budgets = project.budget_versions.filter(version_number=None) 
     print "Latest version of budget: ", project.budget_versions() 
     """ 
     1. Check how many elements have been saved to 'budgets' 
     2. Loop through the elements- assign any with no budget items/ presentation date to a test project 
     3. Return the element with the budget items/ presentation date 
     """ 
     for budget in budgets: 
      if budget.budget_items == "": 
       budget.project = "test" 
      else: 
       budget.project = project 

     return budget 
    except ObjectDoesNotExist: 
     try: 
      budget = project.budget_versions.filter(version_number=0).order_by('-presentation_date')[0] 
      print "Latest verions of budget (execpt- try): ", project.budget_versions() 
      return budget 
     except IndexError: 
      print 'Budgets found', project.budget_versions.all() 
      return None 

这一观点的目的是采取了“项目ID”的参数,并根据该ID,返回最新版本的预算属于该项目,将所有“较早”的预算分配到一个列表中。但是,当我尝试在Python shell中运行此视图时,使用命令get_current_budget(5915)(我知道'5915'是数据库中某个项目的ID),我得到一个KeyError,它表示:

KeyError异常回溯(最近通话最后一个) 在() ----> 1个get_current_budget(5915)

这也给消息:

我们使用** kwargs而非kwarg参数执行

504    # `manager='manager_name'` syntax. 

我真的不明白这是什么意思?有人可以解释给我听?我在这里做错了什么?

回答

0

尝试是与特定

get_current_budget(PROJECT_ID = 5915)

,看看会发生什么。

另外,您看到的第二条消息显然是一条评论,可能来自GenericRelationObjectManager找到的here。不过,我不确定你为什么看到它。