2009-04-08 28 views
0

使用Django,第一次訪問時如何生成字段的值?然後將該值存儲在該字段上。如何在第一次訪問字段時生成字段的值?

對我來說,這是一個形象,但它可以是任何東西,我想。我需要的是一個函數,它在字段被訪問或包裝訪問之前運行,並在檢查產生它的空值時,或類似的東西。

回答

3

還有的是一個getters and setters票在djangoproject好幾年,現在開放,但沒有運氣。我見過的情況三種常見的方法你描述:

  • 把你的模型字段以不同的名字,說image_field,寫一個getter/setter方法對(使用python的property語法)在你的對象稱爲image那個查詢該字段。這將用於你的函數的隨意使用,但是來自框架內的任何調用顯然將忽略你的getter/setter。

  • 創建自己的custom field子類,如果可能的工作魔術給你。

  • 覆蓋另存爲ozanonay建議。

1

是否有任何理由,你爲什麼不能這樣做,當對象被保存?因爲那將是十分容易通過重寫保存方法在相關模型來完成,例如:

def save(self, force_insert=False, force_update=False): 
    if not self.image: 
     self.image = foo 
    super(RelevantModel, self).save(force_insert, force_update) 

當然,如果是你的時間之間的相關差異的對象第一次保存,首次訪問特定字段的時間,那麼這並不能解決您的問題。

+1

有兩個原因,我不想這樣做:1)這是生成的數據,它應該可以刪除這些數據,並把它按需再生(如果生成算法進行了改進,或這些數據沒有備份)。 – Pablo 2009-04-08 18:40:39