当我在 Django 中迭代查询时,我的字典仅更新最后一项。有谁知道如何在其上添加所有查询数据。 这很奇怪,因为如果我使用相同的查询创建一个列表,它确实会获取所有数据(正如您所看到的,5号供应商在列表中有两个 opening_hours,但在字典中没有):
使用字典查询:
dict_today_open_hour = {}
for t in v.today_opening_hours:
dict_today_open_hour.update({t.vendor.id:{'today_from_hour': t.from_hour, 'today_to_hour': t.to_hour,}})
Dict 结果是:
{1: {'today_from_hour': '07:00', 'today_to_hour': '20:00'}, 5: {'today_from_hour': '22:00', 'today_to_hour': '23:00'}}
使用列表进行相同查询:
list_today_open_hour = []
for t in v.today_opening_hours:
list_today_open_hour.append({t.vendor.id:{'today_from_hour': t.from_hour, 'today_to_hour': t.to_hour,}})
列出结果:
[{1: {'today_from_hour': '07:00', 'today_to_hour': '20:00'}}, {5: {'today_from_hour': '09:00', 'today_to_hour': '19:00'}}, {5: {'today_from_hour': '22:00', 'today_to_hour': '23:00'}}]
正如您在列表结果中看到的那样,我从查询中获取了所有数据,但在字典结果中我只获取了供应商 ID 号 5 中的最后一项。
有谁知道是否可以:
1-) 获取字典查询中的所有数据,就像我从列表中获取的数据一样?如果可以怎么办?
2-) 是否可以在模板中使用查询列表结果并使用供应商 ID 对其进行过滤?做这样的事情:
{% for l in list_today_open_hour %}
{% if l.0 == vendor.id %}
{{ l.1 }} - {{ l.2 }}
{% endif %}}
{% endfor %}}
我尝试使用上面的代码来使用查询结果中的列表,因为它是完整的,但我无法获取带有“l.0”的供应商ID,我什至不知道它是否可能。
如果有人可以帮助解释这些问题或提供有关如何解决问题的任何指示,我将非常感激。
非常感谢!
您在字典中的键值对中对 2 个不同的项目使用相同的键“5”。我认为这就是它取代“5”关键项目的原因。因为字典不能有重复的键,所以它们拥有的每个项目都有唯一的键。但在列表中它可以有重复的键。