查询Django中的相关集合

时间:2014-02-24 23:57:49

标签: python django

我正在开发一个具有以下布局的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中预先形成这些类型的查询的任何信息。我正在尝试甚至可能吗?

1 个答案:

答案 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())