簡體   English   中英

通過字段自動從表中檢索最新記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM