Python 通过字段自动从表中检索最新记录

Python 通过字段自动从表中检索最新记录,python,django,django-models,Python,Django,Django Models,很抱歉标题不清楚,我真的不知道该放什么才能准确描述我的问题,所以欢迎您编辑我的问题 我正在构建我的第一个Django webapp,它应该是一个管理员工工资单的应用程序(这将是我工作场所的内部应用程序)。我这样做主要是为了学习Django,也是为了构建一些有用的东西 我的问题是保存一些历史数据,但始终只检索每个员工的当前最新数据。我会提供一个例子,希望我能更容易解释 假设我们有两个模型(我确实有一个类似于这些模型的实现): 并确保每次添加新地址时,我都会将其更新为指向EmployeeAddres

很抱歉标题不清楚,我真的不知道该放什么才能准确描述我的问题,所以欢迎您编辑我的问题

我正在构建我的第一个Django webapp,它应该是一个管理员工工资单的应用程序(这将是我工作场所的内部应用程序)。我这样做主要是为了学习Django,也是为了构建一些有用的东西

我的问题是保存一些历史数据,但始终只检索每个员工的当前最新数据。我会提供一个例子,希望我能更容易解释

假设我们有两个模型(我确实有一个类似于这些模型的实现):

并确保每次添加新地址时,我都会将其更新为指向
EmployeeAddress
表中的最新记录

但以下示例中显示了一个更有趣的案例:

假设我有另一个模型:

class EmployeePhone(models.Model):
    id = models.IntegerField(primary_key=True)
    employee = models.ForeignKey('Employee')
    number = models.IntegerField()
    start_date = models.DateField()
    end_date = models.DateField()
现在,在这种情况下,每个员工可能有几个(活动)电话记录(可能是家庭电话、工作电话、手机等)。 在这种情况下,我想在
员工
中添加一个新字段,该字段将被调用:
电话号码
,并确保每当访问此字段时,我都会获得该员工的活动电话记录列表。每次我想访问电话号码时,不必从
Employee
向后显式查询
EmployeePhone
,然后通过缺少
end\u date
的记录进行过滤,我希望能够从员工本身的字段轻松访问这些记录

如果电话号码表没有保存历史记录(意味着所有记录都处于活动状态,一旦某个记录不再有效,我们就删除它),这很简单,我可以通过迭代
Employee.employeephone\u set
来获取所有电话记录-这些都是该员工的有效电话号码。但由于我们有历史记录,这对我来说不再有效,我需要在
Employee.employeephone\u set
上添加额外的查询(过滤器),以仅检索最新的活动电话号码

还有更多的例子,比如银行账户历史记录表(类似于地址示例),以及每个员工的办公室头衔(每个员工可能有几个),等等

现在,我可以想出一种方法来解决我的问题,那就是在Employee中实现一个属性,每当调用该属性的get方法时,该属性就会自动查询和过滤电话表。但我想听听其他解决我(不那么难)问题的方法

通过这篇长文章,我可能让这个问题看起来很重要,但事实并非如此。。我只是在想也许我错过了什么。。也许Django实际上支持我想要实现的目标

我的问题是保存一些历史数据,但始终只检索每个员工的当前最新数据

很抱歉,我只是费心看了这么远,而且我正在玩一个你不知道的
最新的
查询集


嗯,这不是我需要的。。。感谢您的帮助,但您可能希望继续阅读-至少我给出的第二个示例(每个员工的电话号码)
现在,我可以想出一种方法,解决我的问题的方法是在Employee中实现一个属性,该属性在调用该属性的get方法时自动查询和过滤电话表。但我想听听其他解决我(不那么难)问题的方法。
你想得太多了。正如您所说,附加到员工的方法就可以了;或者,如果你不喜欢,创建一个经理。
 address = models.OneToOneField('EmployeeAddress')
class EmployeePhone(models.Model):
    id = models.IntegerField(primary_key=True)
    employee = models.ForeignKey('Employee')
    number = models.IntegerField()
    start_date = models.DateField()
    end_date = models.DateField()