python过滤类的实例

时间:2016-11-07 15:52:12

标签: python django django-views

我是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返回属于该项目的最新预算版本,并分配所有&# 39;老年'预算到清单。

但是,当我尝试在Python shell中运行此视图时,使用命令get_current_budget(5915)(我知道' 5915'是数据库中某个项目的ID),我得到一个KeyError,其中说:

  

KeyError Traceback(最近一次调用最后一次)    in()   ----> 1 get_current_budget(5915)

它还提供了以下信息:

  

我们使用** kwargs而不是kwarg参数来强制执行

504             # `manager='manager_name'` syntax.

我真的不明白这意味着什么......有人可以向我解释一下吗?我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

尝试具体使用

  

get_current_budget(PROJECT_ID = 5915)

看看会发生什么。

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