2014-04-06 23 views
4

我正在學習一些Django,遇到了一個小問題。如何在Django中默認IntegerField

我正在尋找一種方法,使得suit_length默認等於客戶的身高。這種代碼工作對我來說:

class Customer(models.Model): 
     name = models.CharField(max_length=20) 
     height = models.IntegerField(default=170) 

    class Suit(models.Model) 
     customer = models.ForeignKey(Customer) 
     suit_design = models.CharField(max_length=100) 
     suit_length = models.IntegerField(default=0) 
     def get_height(self): 
      self.suit_length = self.customer.height 
      return 

但每次我創建一個新的適應其默認suit_length = 0,我要運行get_height()來得到我想要的東西。有沒有辦法將default_length默認爲customer.height,並且爲了避免每次創建新的Suit時運行get_height()?我可能正在尋找像這樣的水漬:

class Customer(models.Model): 
     name = models.CharField(max_length=20) 
     height = models.IntegerField(default=170) 

    class Suit(models.Model) 
     customer = models.ForeignKey(Customer) 
     suit_design = models.CharField(max_length=500) 
     suit_length = models.IntegerField(default=lambda:self.customer.height) 

但是,這段代碼不起作用。

+0

只要你的顧客默認身高是170,爲什麼不穿西服_Lenght 170呢? –

+0

好點,但讓我們假裝沒有默認高度。 – BasiL

回答

4

Django使用save()方法實際保存數據。您可以像這樣覆蓋它:

class Suit(models.Model): 
    def save(self): 
     if self.suit_length == 0: 
      self.suit_length = self.customer.height 
     super(Suit, self).save() 

它不會覆蓋默認值,但會達到您的目標。