Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how do i loop through fields of an object?

I have a model like this, how can I loop through it and not have to type out company.id, company.name, etc?

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)
like image 219
iCodeLikeImDrunk Avatar asked Apr 27 '12 15:04

iCodeLikeImDrunk


2 Answers

You can loop over all field names like so

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

this also works if you have a category instance:

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

Update for Django 1.8

Django 1.8 now has an official model Meta api and you can easily grab all the fields:

from django.contrib.auth.models import User
for field in User._meta.get_fields():
    print field
like image 152
randlet Avatar answered Oct 29 '22 10:10

randlet


First get them, then use a for loop or list comprehension.

like image 30
Ignacio Vazquez-Abrams Avatar answered Oct 29 '22 08:10

Ignacio Vazquez-Abrams