【问题标题】:how do i loop through fields of an object?我如何循环遍历对象的字段?
【发布时间】:2012-05-08 09:20:08
【问题描述】:

我有一个这样的模型,我如何循环遍历它而不必输入 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)

【问题讨论】:

标签: python django model


【解决方案1】:

您可以像这样遍历所有字段名称

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

如果您有类别实例,这也适用:

c = Company(name="foo",website="bar",email="baz@qux.com",....,)
c.save()
for field in c._meta.get_all_field_names():
    print getattr(c, field, None)

Django 1.8 更新

Django 1.8 现在有一个official model Meta api,您可以轻松获取所有字段:

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

【讨论】:

    【解决方案2】:

    视图中的迭代:

    如果您有company 的实例Company

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

    【讨论】:

    • 太棒了!如何从__dict__.items() 生成的dict_items 列表中删除特定元组?
    【解决方案3】:

    首先get them,然后使用 for 循环或列表推导。

    【讨论】:

      【解决方案4】:

      这是一个可能的解决方案:

      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') 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-22
        • 1970-01-01
        • 2020-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-30
        相关资源
        最近更新 更多