gpt4 book ai didi

python - Django 查询/迭代问题

转载 作者:太空宇宙 更新时间:2023-11-03 19:01:37 25 4
gpt4 key购买 nike

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

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

我想从表中提取用户历史记录,然后为 12 个月的每个月设置"is"或“否”作为其完成状态。

这是我的代码:

    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”方式这没有大量的嵌套循环。

最佳答案

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

看来您只能获取已完成类(class)的记录。因此,您可以预先构建一个包含 12 个结果的列表,全部设置为“否”。然后,在查询数据库后,将与您得到的结果相对应的那些翻转为"is"。

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

关于python - Django 查询/迭代问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15908176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com