Skip to main content
 首页 » 编程设计

python之两个日期之间的 Django ORM 交集

2025年05月04日26qlqwjy

我有这样的模型:

class Model(models.Model): 
    name = models.CharField(max_length=255) 
    start_date = models.DateField() 
    end_date = models.DateField() 
    user = models.ForeignKey(User) 

在数据库中它看起来像:

name    start_date    end_date       user 
 1      2016-01-20    2016-01-26       1 
 1      2016-01-24    2016-02-02       2 
 1      2016-01-28    2016-02-10       3 
 2      2016-01-19    2016-01-27       4 

我会找到同时住在同一个地方的用户。例如,对于后面的 table ,用户“2”将住在名为“1”的地方,他可以遇到用户“1”和用户“3”。用户“1”只能与用户“2”会面。 “3”- 只有用户“2”。

你能告诉我,我如何在 Django ORM 中查询这个案例吗?

UPD

class User(models.Model): 
    name = models.CharField(max_length=255) 
    last_name = models.CharField(max_length=255) 

请您参考如下方法:

检查两个人是否在同一时间在同一地点的一种方法是使用日期并验证在该日期有哪些具有相同位置的用户:

import datetime 
 
date_wanted = datetime.datetime.today() 
neighbour_users = User.objects.values('model_set__name').annotate(Q(start_date__lte = date_wanted) & Q(end_date__gte = date_wanted)) 

我认为也可以使用filter代替annotate:

neighbour_users = User.objects.values('model_set__name').filter(start_date__lte = date_wanted, end_date__gte = date_wanted) 

因此,我们使用 values 将用户分组在同一个地方,然后我们过滤日期以获得想要的结果。