我有类似的代码返回表中的所有条目:
all_entries = Entry.objects.all()
我有以下数组:
exclusion_list = [
{
"username": "Tom",
"start_date": 01/03/2019,
"end_date": 29/02/2020,
},
{
"username": "Mark",
"start_date": 01/02/2020,
"end_date": 29/02/2020,
},
{
"username": "Pam",
"start_date": 01/03/2019,
"end_date": 29/02/2020,
}
]
我想排除从“2019年3月1日”到“2020年2月29日”的所有Tom记录,从“2020年2月1日”到“2020年2月29日”的所有“Mark”记录,以及从“2019年3月1日”到“2020年2月29日”的所有Pam记录
我想在一个循环中这样做,所以我认为我应该这样做:
for entry in all_entries:
filtered_entry = all_entries.exclude(username=entry.username).filter(date__gte=entry.start_date, date__lte=entry.end_date)
这种方法正确吗?我是Django ORM的新手。有更好、更有效的解决方案吗
谢谢你的帮助
是的,你可以通过循环来完成
这将导致一个查询,该查询的WHERE子句在循环的每个周期都得到扩展。但要做到这一点,您必须使用上一个周期的过滤查询集:
笔记exclude()
中写入多个关键字参数(查看文档[here][1])所以如果你的排除列表不是太大,我想你可以不用担心
如果排除列表增加,最好将排除列表保存在数据库中。有了这个,ORM可以生成子查询而不是单个值。举个例子:
相关问题 更多 >
编程相关推荐