2012-04-27 8 views
7

Tengo un modelo como este, ¿cómo puedo recorrerlo y no tener que escribir company.id, company.name, etc.?¿cómo recorro los campos de un objeto?

class Company(models.Model): 
    name = models.CharField(max_length=1000) 
    website = models.CharField(max_length=1000) 
    email = models.CharField(max_length=200) 
    phone_number = models.CharField(max_length=100) 
    city = models.CharField(max_length=1000) 
    zip = models.IntegerField() 
    state = models.CharField(max_length=1000) 
    address = models.CharField(max_length=1000) 
    address2 = models.CharField(max_length=1000) 
+0

Para hacer qué? Asignarles? ¿Usalos, usalos a ellos? –

+0

posible duplicado de [Django - Iterar sobre los nombres de campo de la instancia del modelo y los valores en la plantilla] (http://stackoverflow.com/questions/2170228/django-iterate-over-model-instance-field-names-and-values-in -modelo) – miku

Respuesta

3

Primera get them, a continuación, utilizar un bucle o una lista de comprensión.

1

esta es una solución posible:

entity = Company.all().get() 

for propname, prop in entity.properties().items(): 
    print propname, prop.get_value_for_datastore(entity) 

otra podría ser:

# this returns a dict with the property 
# name as key and the property val as its value 
entity.__dict__.get('_entity') 
20

Puede bucle sobre todos los nombres de campo al igual que

for name in Company._meta.get_all_field_names(): 
    print name 

esto también funciona si tener una instancia de categoría:

c = Company(name="foo",website="bar",email="[email protected]x.com",....,) 
c.save() 
for field in c._meta.get_all_field_names(): 
    print getattr(c, field, None) 

Actualización para Django 1.8

Django 1.8 tiene ahora una official model Meta api y se puede agarrar fácilmente todos los campos:

from django.contrib.auth.models import User 
for field in User._meta.get_fields(): 
    print field 
3

iteración en una vista :

Si tener una instancia company de Company:

fields= company.__dict__ 
for field, value in fields.items(): 
    print field, value 
Cuestiones relacionadas