2016-11-07 27 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。不過,我不確定你爲什麼看到它。