【问题标题】:How to query most recent record across multiple tables in django如何在 django 中跨多个表查询最新记录
【发布时间】:2013-02-02 19:18:24
【问题描述】:

我有两个看起来像这样的模型:

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, node1]

【问题讨论】:

    标签: django django-models django-queryset


    【解决方案1】:
    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)
    

    更新: 检查我昨天发布的这个问题: Django reverse query by the last created object 也许这会对你有所帮助。

    【讨论】:

    • 感谢@UnLiMiTeD 的回复,但我不确定我是否理解。 all_active_notes 将只是在某个时候处于活动状态的节点列表。我错过了什么吗?
    • 我添加了一些示例数据和预期的答案。我看过你建议的帖子,但我认为它对我没有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    • 2013-09-12
    • 1970-01-01
    • 2016-01-29
    • 2020-07-29
    相关资源
    最近更新 更多