2013-02-18 53 views
1

有兩個模型是這樣的:我如何查詢跨多個表最新記錄在Django

class Node(models.Model): 
    user = models.ForeignKey(User, null=False) 
    name = models.CharField(max_length=50) 

class Activation(models.Model): 
    node = models.ForeignKey(Node, null=False) 
    active = models.BooleanField(default=False) 
    datetime = models.DateTimeField(default=datetimeM.datetime.now) 

激活表中存儲一個給定的節點是否是「主動」與否。因此,要確定節點是否處於活動狀態,需要獲取該節點的最新激活記錄。

我想弄清楚如何編寫一個返回所有活動節點的django查詢。

下面是一些示例數據

Node Table 
    id | name 
-------------------- 
    0 | andrew 
    1 | bill 
    2 | bob 

Activation Table 
    id | nodeId | active | datetime 
-------------------- 
    0 | 0 | false | 01-01-2013:00:01:02 
    1 | 0 | true | 01-02-2013:00:01:02 
    2 | 0 | false | 01-03-2013:00:01:02 
    3 | 1 | false | 01-04-2013:00:01:02 
    4 | 0 | true | 01-05-2013:00:01:02 
    5 | 1 | true | 01-06-2013:00:01:02 
    6 | 2 | false | 01-07-2013:00:01:02 

所以查詢需要返回[NODE0,節點1]

回答

0
class Node(models.Model): 
    user = models.ForeignKey(User, null=False) 
    name = models.CharField(max_length=50) 

class Activation(models.Model): 
    node = models.ForeignKey(Node, null=False, related_name='activations') 
    active = models.BooleanField(default=False) 
    datetime = models.DateTimeField(default=datetimeM.datetime.now) 

    #latest activation record for that node: 
    try: 
     latest_activation = node.activations.latest('id') 
    except: 
     latest_activation = None 

    # Return all active notes: 
    all_active_notes = Node.objects.filter(activations__active=True) 

更新: 檢查這個問題我貼yestarday: Django reverse query by the last created object 也許這會幫助你。

+0

感謝@UnLiMiTeD的回覆,但我不確定自己明白。 'all_active_notes'只是一個有點活躍的節點列表。我錯過了什麼嗎? – Hamish 2013-02-18 12:07:50

+0

是的。也許我想念這個問題。 – UnLiMiTeD 2013-02-18 12:20:55

+0

我已經添加了一些示例數據和預期的答案。我看了一下你建議的帖子,但我認爲這對我沒有幫助。 – Hamish 2013-02-19 00:46:47