【问题标题】:Django query on historyDjango历史查询
【发布时间】:2010-09-24 17:44:38
【问题描述】:

我有一个模型“项目”,它与“位置”的比例为 1:n。意味着,有一个项目的位置历史。

Location 对“Room”、“Room”对“Floor”和“Floor”对“Building”有一个 FK。 现在,我想选择当前位于特定楼层的所有项目。

我可以通过列表推导来解决它,但是有没有更好的方法可以通过一个查询来解决它?

-- 更新--

感谢您的回答,很遗憾,它们不符合要求。为了澄清这个问题,这里有一些模型的代码sn-ps:

class Item(models.Model):
    [..]

class Location(models.Model):
    item = models.ForeignKey(Item)
    room = models.ForeignKey(Room)
    created_at = models.DateTimeField(auto_now_add=True)
    [..]


class Room(models.Model):
        floor = models.ForeignKey(Floor)
        [..]

class Floor(models.Model):
        building = models.ForeignKey(Building)
        [..]

class Building(models.Model):
        [..]

我想获取所有当前位于特定楼层的项目,由楼层 ID 指定(如您在模型中所见,项目可以重新定位)。再次感谢。

【问题讨论】:

  • 我看不到(如果您保存项目所在的所有位置的历史记录)如何确定当前位置(Location 中可能有 DateField 或类似的东西)好吗?
  • 你说得对。对不起,有一个 created_at 字段我忘了添加到示例代码中。

标签: django django-orm


【解决方案1】:

我不完全了解您的模型,但应该这样做:

items_on_floor_one = Item.objects.filter(\
                     location__in=Location.objects.filter(room__floor__number=1,\
                     room__floor__building__name='my_building'))

【讨论】:

    【解决方案2】:
    items = Item.objects.filter(location__room__floor__name='building 1', location__room__floor__num=1)
    

    【讨论】:

      猜你喜欢
      • 2017-05-11
      • 2019-03-20
      • 1970-01-01
      • 1970-01-01
      • 2018-10-10
      • 2019-01-27
      • 1970-01-01
      • 2020-10-30
      • 1970-01-01
      相关资源
      最近更新 更多