我有这样的模型:
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 将用户分组在同一个地方,然后我们过滤日期以获得想要的结果。
