2012-08-12 107 views
9

我想給模型方法的模型字段默認值。從模型方法的Django模型字段默認

我該怎麼做?

當我嘗試此代碼

Class Person(models.Model): 
    def create_id(self): 
     return os.urandom(12).encode('hex') 

    name = models.CharField(max_length = 255) 
    id = models.CharField(max_length = 255,default = self.create_id) 

我得到NameError:名字 '自我' 是沒有定義。

如果我刪除'自己'我得到'create_id'需要1個參數。

+0

這個ID是否必須是唯一的? person_id = models.AutoField(primary_key = True)就像一個想法。 – Don 2013-06-14 20:57:01

+0

是的,它必須是 – yossi 2013-06-16 06:51:48

回答

4

我落得這樣做:(除去這兩個個體經營)

Class Person(models.Model): 
    def create_id(): 
     return os.urandom(12).encode('hex') 

    name = models.CharField(max_length = 255) 
    id = models.CharField(max_length = 255,default = create_id) 

它是工作,但如果我不知道是最好的還是正確的方式。

+3

這*看起來不錯。我也懷疑這是否是一種好的做法。* – eugene 2013-07-23 05:07:36

+0

這是如何工作的?我認爲你缺少'self'作爲'create_id'的第一個參數,並且像下面這樣調用它:'self.create_id()'而不是'create_id' – Paco 2015-03-31 14:09:46

+0

@eugene這不是很好的做法,因爲id可能不會是獨一無二的,我猜它應該是。 – dietbacon 2015-10-21 23:49:57

9

您可以定義全局的方法是這樣的:

def create_id(): 
    return os.urandom(12).encode('hex') 

Class Person(models.Model): 
    name = models.CharField(max_length = 255) 
    id = models.CharField(max_length = 255,default = create_id) 
+1

我想製作班級的方法。 – yossi 2012-08-13 07:18:57

+0

通常如果你需要它在課堂上,這意味着你可能需要其他模型屬性。 '.save()'方法是最好的。 – 2014-12-20 23:05:43