2010-08-23 15 views
5

¿cómo puedo iterar y recuperar todos los campos de un modelo django?Django model iterate fields

Sé que foo.item._meta.get_all_field_names() me trae todos los nombres de campo. ¿Cómo puedo acceder a esos campos (incluidos sus valores reales) en una instancia modelo? (Excepto la notación normal foo.fieldname).

Necesito esto para poder crear una salida personalizada para mi modelo, incluidas sus relaciones con ManyTomany. Alguna idea?

Respuesta

8

¿Qué tal:

getattr(foo.__class__, <field_name>) 

Esto debe darle el objeto de campo, más que el valor en la instancia modelo dado. Si desea que el valor del campo en el modelo insance dado se le puede llamar así:

getattr(foo, <field_name>) 
+0

Como ya se ha mencionado, esto solo me devuelve el objeto de campo. Necesito el valor de los campos de la instancia del modelo dado. La pregunta editada correspondió ... –

+0

He editado la respuesta, espero que esto ayude. – gruszczy

2

Esto se ve mal pero va a trabajar:

for each in model_instance._meta.fields: 
    print each.value_from_object(model_instance) 

Dicho esto, tengo otra sugerencia. Dado que su requisito es

para crear una salida personalizada para mi modelo, incluidas sus relaciones con ManyTomany.

¿qué tal, serializing la instancia a un formato adecuado (XML/JSON) y luego trabajando en eso? esto evita cualquier dependencia en _meta o cualquiera de los métodos internos (que posiblemente pueden cambiar).

+1

Manoj gracias por sus adiciones. El feo todavía no resuelve el problema de mis relaciones ManyToMany :(¡Creo que tendré que ir para la serialización! –

Cuestiones relacionadas