2009-10-26 50 views

回答

8

好,Django的模型實例只是Python對象,還是讓我一直所告知:P

這是我會怎麼做:

class MyModel(models.Model): 
    CONSTANT = 1234 
    id = models.AutoField(primary_key=True) # not really needed, but hey 

    @property 
    def big_id(self): 
     return self.pk * MyModel.CONSTANT 

很明顯,你會如果您嘗試使用未保存的模型執行此操作,則會發生異常。您也可以預先計算big_id值,而不是在每次訪問時計算它。

+0

謝謝!屬性是我正在尋找... – akv 2009-10-27 00:19:29

1
class Person(models.Model): 
    x = 5 
    name = .. 
    email = .. 
    def _get_y(self): 
     if self.id: 
      return x * self.id   
     return None 
    y = property(_get_y) 
0

你有兩個選擇,我能想到的現在:在你最好的選擇是定義在返回self.id模型的方法數據庫

  1. 既然你不想領域* SOME_CONSTANT,比如你稱之爲big_id()。你可以隨時使用這個方法作爲yourObj.big_id(),它可以在模板中作爲yourObj.big_id使用(你可能想閱讀關於django模板中的「magic dot」)。
  2. 如果您不介意它在數據庫中,則可以覆蓋對象的save方法以計算id * SOME_CONSTANT並將其存儲在big_id字段中。這將節省您不必每次計算它,因爲我假設ID不會改變
相關問題