2012-04-27 10 views
7

मेरे पास ऐसा मॉडल है, मैं इसके माध्यम से कैसे लूप कर सकता हूं और company.id, company.name, आदि टाइप करना नहीं है?मैं किसी ऑब्जेक्ट के फ़ील्ड के माध्यम से कैसे लूप करूं?

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

क्या करने के लिए? उन्हें सौंपें? उन्हें इस्तेमाल करें? –

+0

संभावित डुप्लिकेट [Django - मॉडल उदाहरण फ़ील्ड नामों और टेम्पलेट में मूल्यों पर इटरेट] (http://stackoverflow.com/questions/2170228/django-iterate-over-model-instance-field-names-and-values-in -template) – miku

उत्तर

3

पहले get them, तो पाश या सूची समझ के लिए एक का उपयोग करें।

1

इस एक संभव समाधान है:

entity = Company.all().get() 

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

एक और एक हो सकता है:

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

तुम इतनी

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

की तरह सभी फ़ील्ड नाम से अधिक पाश यह भी अगर आप काम करता है सकते हैं एक श्रेणी का उदाहरण है:

Django 1.8

Django 1.8 के लिए

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) 

अद्यतन अब एक official model Meta api है और आप आसानी से सभी क्षेत्रों को आकर्षित कर सकते हैं:

आप हैं: एक ध्यान में रखते हुए

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

पुनरावृत्ति company का उदाहरण Company:

fields= company.__dict__ 
for field, value in fields.items(): 
    print field, value 
संबंधित मुद्दे