2012-04-27 25 views
7

Tôi có một mô hình như thế này, làm thế nào tôi có thể lặp qua nó và không phải gõ ra company.id, company.name, vv?Làm thế nào để tôi lặp qua các trường của một đối tượng?

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

Để làm gì? Chỉ định cho họ? Sử dụng chúng? –

+0

có thể trùng lặp của [Django - Iterate trên mô hình tên trường mẫu và giá trị trong mẫu] (http://stackoverflow.com/questions/2170228/django-iterate-over-model-instance-field-names-and-values-in -bản mẫu) – miku

Trả lời

3

Đầu tiên get them, sau đó sử dụng vòng lặp for hoặc danh sách hiểu.

1

đây là một giải pháp khả thi:

entity = Company.all().get() 

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

nhau có thể là:

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

Bạn có thể lặp qua tất cả các tên trường như vậy

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

này cũng hoạt động nếu bạn có một thể loại danh mục:

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) 

Cập nhật cho Django 1,8

Django 1.8 hiện nay có một official model Meta api và bạn có thể dễ dàng lấy tất cả các lĩnh vực:

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

Iteration trong một xem:

Nếu bạn có một ví dụ company của Company:

fields= company.__dict__ 
for field, value in fields.items(): 
    print field, value 
Các vấn đề liên quan