我正在开发一个具有以下布局的Django应用程序(剪裁和匿名):
class Room(models.Model):
pass # Bunch of fields here
class Reserveration(models.Model):
room = models.ForeignKey(Room)
start_date = models.DateTimeField()
end_date = models.DateTimeField()
# more stuff
现在,我想做一些与房间及其集合预订相关的问题。 (我想我想做的大部分/全部涉及选择临时表...)以下是我想做的事情的例子(用LINQ编写)。我知道我可以在for循环中执行这些操作,但我想将其保留在数据库中。
// Return all rooms that are reserved in the future
return Rooms.Where(r => Reservations.Where(a => a.room == r)
.OrderByDecending(a => a.end_date)
.Single()
.end_date > DateTime.Now);
// Return all rooms that are free right now
return Rooms.Where(r => ! Reservations.Any(a => a.room == r &&
a.start_date < DateTime.Now && DateTime.Now < a.end_date));
我似乎无法找到有关如何在不使用原始SQL的情况下在Django中预先形成这些类型的查询的任何信息。我正在尝试甚至可能吗?
答案 0 :(得分:0)
来自https://docs.djangoproject.com/en/dev/topics/db/queries/:
使用r.room_set
获取相关的查询集。
您的第一个查询转换为:
r.room_set.filter(end_date__gt=datetime.date.today()).order_by('end_date')[:1]
如果没有匹配则返回空集,或者带有第一个元素的集。
第二个是:
r.room_set.filter(start_date__lt=datetime.date.today(),
end_date__gt=datetime.date.today())