是否可以将非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中,并从前端访问它。
如果我正在使用与Django ORM相关的任何东西,annotate()
在这里将是理想的选择,但是当涉及到“注入”外部数据时,我要寻找的是什么?
我绝对可以从前端的JS拨打每个商店的电话,但是我宁愿绕开它
答案 0 :(得分:1)
这是一个丑陋的解决方案,但是仍然是一个解决方案(我将在实际代码中进行清理)。
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 }}
来访问哪个。
答案 1 :(得分:-1)
您还没有看到完整的代码 但是请查看您是否使用以下方式正确地装订了上下文:
context = {}
books = Books.objects.all()
context ['books'] =图书