Django:得到模型字段的列表了吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (25)

我定义了User类继承的models.Model...。我想要一个为这个模型定义的所有字段的列表。例如,phone_number = CharField(max_length=20)...。基本上,我想检索从Field上课。

我想我可以利用inspect.getmembers(model),但是它返回的列表不包含任何这些字段。看起来Django已经掌握了这个类,并添加了它的所有神奇属性,并去掉了实际定义的内容。那么...我怎么才能得到这些字段呢?它们可能有一个函数,用于为自己的内部目的检索它们?

提问于
用户回答回答于

对于Django版本1.8及更高版本:

get_all_field_names()方法是从Django 1.8开始,将在1.10中删除...

上面链接的文档页提供了一个完全向后兼容的实现。get_all_field_names(),但在大多数情况下[f.name for f in MyModel._meta.get_fields()]应该能正常工作。

1.8之前的Django版本:

model._meta.get_all_field_names()

这应该能起作用。

这需要一个实际的模型实例。如果您所拥有的只是django.db.models.Model,那你应该myproject.myapp.models.MyModel._meta.get_all_field_names()

用户回答回答于

我发现将这个添加到Django模型中非常有用:

def __iter__(self):
    for field_name in self._meta.get_all_field_names():
        value = getattr(self, field_name, None)
        yield (field_name, value)

这使你可以:

for field, val in object:
    print field, val

扫码关注云+社区