python - 向 Django QuerySet 添加值
问题描述
有没有办法将非 Django 提供的值附加到查询中?
例如,要确定一家商店是否关门,我可以运行一个名为的函数,该函数get_closed_stores()
返回一个已关闭商店的列表。
商店关闭
[00090, 00240, 00306, 00438, 03005, 05524]
太好了,现在我们有关闭商店的商店编号。让我们获取那些实际的商店对象。
询问
Store.objects.filter(
store_number__in=[00090, 00240, 00306, 00438, 03005, 05524]
)
我们现在有了 QuerySet,但我们绝对无法检测商店何时关闭,因为数据库不包含任何有关紧急关闭的信息,但 Sharepoint 包含。所以回到get_closed_stores()
我们可以在商店编号旁边返回关闭日期,这样我们的关闭商店列表(字典)看起来更像下面:
带日期的商店列表
{
[00090, '1/28/19 5:00PM'],
[00240,'1/28/19 5:00PM'],
[00306, '1/28/19 5:00PM'],
[00438,'1/28/19 5:00PM'],
[03005,'1/28/19 5:00PM'],
[05524, '1/28/19 5:00PM']
}
现在日期与我的商店编号一起,我可以将它添加到我的查询集(理想情况下)并从我的前端访问它。
如果我正在使用任何与 Django ORM 相关的东西,那么annotate()
这里将是理想的,但是当涉及到“注入”外部数据时,我在寻找什么?
我绝对可以从前端的 JS 调用每家商店,但如果我能绕过它,我宁愿不这样做
解决方案
QuerySet本身并没有什么神奇或特殊之处,最终它仍然是一个字典,所以我有一个随机的想法,以我通常会的方式附加到字典中,并且它起作用了。
我的函数现在返回一个字典:
{ "store_number": "close_date" }
我的观点采用这本字典并使用键(商店编号)来查询数据库,然后附加商店的关闭日期store.close_date
,只需说:
store.close_date = store_list[store_number]
这可能会改变,但我想保持它接近原始问题,以使其对未来的读者可读。下面是我的看法。
@login_required
def store_closures(request):
store_list = get_closed_stores()
store_nums = store_list.keys()
closed_stores = Store.objects.filter(store_number__in=store_nums)
for store in closed_stores:
store.close_date = store_list["{:05d}".format(store.store_number)]
return render(request, 'all_store_closures.html', {'closed_stores':closed_stores})
因此,如果您想将非 Django 值添加到查询集,您可以使用附加到字典的标准方法。
for obj in query:
obj.desired_name = 'desired_value'
当然,可以{{ object.desired_name }}
从您的模板访问。
推荐阅读
- apache-spark - 通过 spark 在 hive 中创建表
- wordpress - 将数据属性添加到具有特定类的部分
- terraform - Terraform local-exec 以传递新资源(非硬编码)
- ios - VueJs Nuxt PWA 未在 iphone 上呈现
- python - 从字节上传谷歌云存储失败
- javascript - 使用 detach() 过滤类别
- spring-boot - 如何减少弹簧启动时间
- amazon-web-services - 创建 CloudTrail 时出错:InvalidCloudWatchLogsLogGroupArnException:访问被拒绝。检查您的角色的权限
- ios - 自动连接范围内的蓝牙设备
- snowflake-cloud-data-platform - 如何使用另一个表更新一个表的值