![](/img/trans.png)
[英]Best practices for retrieving the most recent data from a database and presenting it on a website
[英]Retrieving most recent records from a table via fields automatically
抱歉,標題不清楚,我真的不知道該在哪里寫什么東西來准確描述我的問題,所以歡迎您編輯我的問題。
我正在構建我的第一個Django Webapp,該應用程序應該是用於管理員工工資單的應用程序(這將是我工作場所的內部工具)。 我這樣做主要是為了學習Django,同時也要建立一些有用的東西。
我的問題是關於保存一些歷史數據,但始終僅檢索每位員工的最新數據。 我將提供一個示例,希望對我來說更容易解釋。
假設我們有2個模型(我確實對這些模型有類似的實現):
class Employee(models.Model):
id = models.IntegerField(primary_key=True)
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
address = <not implemented yet>
class EmployeeAddress(models.Model):
id = models.IntegerField(primary_key=True)
employee = models.ForeignKey('Employee')
city = models.CharField(max_length=50)
street = models.CharField(max_length=50)
house = models.IntegerField()
start_date = models.DateField()
我希望當我從Employee
實例檢索字段address
,我只會得到該雇員的最新地址。 請注意, EmployeeAddress
表保存了每個員工的所有地址更改。 在大多數情況下,我只需要最近的地址,並且我想直接從員工實例中檢索它。 現在,我可以將address
字段設置為:
address = models.OneToOneField('EmployeeAddress')
並確保我每次將其添加到新地址時都將其更新為指向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
添加一個新字段,稱為: phone_number
,並確保無論何時訪問該字段,我都將僅獲得該員工的活動電話記錄的列表。 我希望從員工本身的字段中輕松訪問那些記錄,而不是從EmployeePhone
向后顯式查詢Employee
,然后按每次我想訪問電話號碼的end_date
丟失的記錄進行篩選。
如果電話號碼表沒有保存歷史記錄(意味着所有記錄都處於活動狀態,並且一旦一條記錄不再有效,我們就將其刪除),這很簡單,我可以通過遍歷Employee.employeephone_set
來獲取所有電話記錄。 -這些都是該員工的所有有效電話號碼。 但是由於有歷史記錄,因此這對我而言不再有效,並且我需要在Employee.employeephone_set
上添加其他查詢(過濾器)以僅檢索最新的活動電話號碼。
還有更多示例,例如銀行帳戶歷史記錄表(類似於地址示例),每位員工的辦公室職位(每位員工可能是多個)以及更多。
現在,有一種方法可以解決我的問題,那就是在Employee中實現一個屬性,該屬性將在每次調用該屬性的get方法時自動查詢和過濾電話表。 但是我想聽聽其他解決我的問題的方法。
在這篇很長的文章中,我可能使問題看起來很重要,但實際上並非如此。.我只是在想,也許我錯過了一些事情。.也許Django實際上支持我想要以某種方式完成的工作。
我的問題是關於保存一些歷史數據,但始終僅檢索每位員工的最新數據。
抱歉,我只想讀很遠的內容,正在打賭您可能不了解latest
。
https://docs.djangoproject.com/zh-CN/1.5/ref/models/querysets/#latest
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.