Django查询/迭代问题

2024-09-21 03:18:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个关于迭代的相当愚蠢的问题,我似乎无法得到正确的答案

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

我想从表中提取用户的历史记录,然后为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 i、 e结果=[N,N,Y,N,N,Y,Y,Y,N,N,N,Y]

上面的查询为用户返回了2条记录,这是正确的,但是在我的迭代中,我不断地得到24条记录,显然是由于外部循环和内部循环,但是我不确定在没有大量嵌套循环的情况下,我应该以什么“pythonic”方式来执行


Tags: 答案用户inid密码for历史记录状态
1条回答
网友
1楼 · 发布于 2024-09-21 03:18:37

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

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

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之间的整数,正如您的代码所提示的那样

相关问题 更多 >

    热门问题