2011-03-09 19 views
8

Necesito saber el nombre db_column de varios campos modelo. En algunos modelos, el nombre se establece explícitamente mediante "db_column = 'foo'", pero la mayoría de los modelos/campos tienen el nombre generado automáticamente por Django.Django: cómo leer el nombre db_column de un campo modelo

¿Cómo puedo recuperar el column_name para todos los campos desde la instancia de un modelo?

Respuesta

17

Hay una API _meta indocumentada que se utiliza ampliamente en todo Django para modelos de introspección. Almacena sus opciones de modelo en el tipo y proporciona aproximadamente dos docenas de métodos y atributos para inspeccionar su modelo y sus campos. Se puede utilizar para obtener todos los campos del modelo y de los campos, usted puede obtener el nombre de la columna, ya que especifican toda la lógica de negocio:

for field in Model._meta.fields: 
    field.get_attname_column() 

Esto devolverá una tupla que contendrá el atributo (campo) nombre en el modelo y el nombre de la columna DB. Para un campo de modelo foo = models.IntegerField(db_column='bar'), esto devolvería ('foo', 'bar').

+6

Esto es lo que estaba buscando, gracias. Sin embargo, encontré la columna self._meta.get_field ('fieldname'). Más conveniente. – user647790

+0

Model._meta.get_field ('foo'). Get_attname_column() [1] devolverá su nombre de db_column. Solo para recapitular el uso de comentarios anterior. – Danil

Cuestiones relacionadas