2012-08-12 18 views
9

Quiero dar un valor de modelo de modelo de campo a partir del método de un modelo.Valor predeterminado de campo del modelo de Django del método de modelo

¿Cómo puedo hacer eso?

cuando intento este código

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) 

consigo NameError: nombre de 'yo' no está definido.

Si elimino el 'auto', entiendo que 'create_id' necesita 1 parámetro.

+0

¿La identificación tiene que ser única? person_id = models.AutoField (primary_key = True) Solo como una idea. – Don

+0

sí, tiene que ser – yossi

Respuesta

4

que terminé haciendo esto: (extracción del mismo de ambos)

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) 

se está trabajando, pero no estoy seguro si esto es la mejor o la forma correcta.

+3

Esto * se ve * bien. También me pregunto si esta es una buena * práctica. * – eugene

+0

¿Cómo está funcionando? Creo que te estás perdiendo 'self' como el primer parámetro de' create_id', y lo llamas así: 'self.create_id()' en lugar de 'create_id' – Paco

+0

@eugene no es una buena práctica en el sentido de que los id's no se puedan ser único, y supongo que se supone que es así. – dietbacon

9

Puede definir método global de esta manera:

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

me gustaría hacer el método de la clase. – yossi

+0

Normalmente, si necesita que esté en la clase, eso significa que probablemente necesite otros atributos de modelo. el método '.save()' sería el mejor para esto. –

Cuestiones relacionadas