2009-08-20 27 views

Respuesta

15

se puede obtener el campo de la siguiente manera:

myfield = MyModel._meta.get_field_by_name('field_name') 

y el valor predeterminado es sólo un atributo del campo:

myfield.default 
+0

Cualquier cosa con un _ está cavando en la parte interna. Ver mi pregunta: http://stackoverflow.com/questions/1011946/django-know-if-property-is-the-default-value –

+9

Hoy en día, el método 'get_field_by_name' devuelve una tupla con el objeto de campo como primer elemento. – Adam

+0

@PaulTarjan tienes razón, pero el '_meta' es uno de esos elementos bien establecidos, no muy probables de cambiar. El consenso general es que está bien acceder a '_meta' de un modelo directamente. –

35
TheModel._meta.get_field('the_field').get_default() 
+2

Esta debería ser la respuesta correcta ahora. – Teekin

0

Si necesita los valores por defecto para más de una campo (por ejemplo, en algún tipo de paso de reinicialización) puede valer la pena crear una instancia de un nuevo objeto temporal de su modelo y utilizar los valores de campo de ese objeto.

temp_obj = MyModel() 
obj.field_1 = temp_obj.field_1 if cond_1 else 'foo' 
... 
obj.field_n = temp_obj.field_n if cond_n else 'bar' 

Por supuesto, esto es sólo vale la pena, si el objeto temporal se puede construir sin más problemas de rendimiento/dependencia.

9

A partir de Django 1.9.x se pueden utilizar:

field = TheModel._meta.get_field('field_name') 
default_value = field.get_default() 
Cuestiones relacionadas