2012-08-12 76 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