2014-02-24 87 views
0
相关藏品

我的工作具有以下布局的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)); 

我似乎无法找到有关如何瓶坯这些类型在Django的查询,而不诉诸原始SQL的任何信息。我正在尝试什么?

回答

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