有没有办法将非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']
}
现在日期与我的商店编号一致,可以将其理想地添加到我的Queryset中,并从前端访问它。
因此annotate()
,如果我正在处理与Django ORM相关的任何内容,那么这里将是理想的选择,但是当涉及“注入”外部数据时,我要寻找的是什么?
我绝对可以从前端的JS致电每个商店,但我宁愿不去解决
一个查询集本身并没有什么神奇或特殊,到底它还是一本字典,所以我只好随机概念追加到词典中的方式,我通常的做法,和它的工作。
我的函数现在返回字典:
{ "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 }}
您的模板进行访问。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句