Django查询/迭代问题

时间:2013-04-09 17:09:28

标签: python django python-2.7

我有一个关于迭代的相当noob问题,我似乎无法正确。

我有一个表,其中包含用户完成的每个月度测试的记录,如果他们错过了一个月,那么表中没有记录。

我想从表格中提取用户历史记录,然后在12个月中的每个月设置Y或N作为其完成状态。

这是我的代码:

    def getSafetyHistory(self, id):
    results = []
    safety_courses = UserMonthlySafetyCurriculums.objects.filter(users_id=id).order_by('month_assigned')
    for i in range(1, 13):
        for s in safety_courses:
            if s.month_assigned == i:
                results.append('Y')
            else:
                results.append('N')

    return results

所以我的理想结果将是一个包含12个条目的列表,Y或N. 即结果= [N,N,Y,N,N,Y,Y,Y,N,N,N,Y]

上面的查询为用户返回2条记录,这是正确的,但在我的迭代中,我总是得到24个条目,显然是由于外部和内部循环,但我不确定我应该做的“pythonic”方式这没有大量的嵌套循环。

1 个答案:

答案 0 :(得分:1)

可能有很多方法可以做到这一点。这是一个想法。

看起来您只会获得已完成课程的记录。所以你可以预先建立一个包含12个结果的列表,所有结果都设置为no。然后在查询数据库之后,将那些数据库翻转为“是”,这与您获得的结果相对应。

results = ['N'] * 12  # prebuild results to all no

safety_courses = UserMonthlySafetyCurriculums.objects.filter(
                     users_id=id).order_by('month_assigned')

for course in safety_courses:
    results[course.month_assigned - 1] = 'Y'

这假设month_assigned是1到12之间的整数,正如您的代码提示的那样。