Django:获取模型字段列表?

我已经定义了一个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()


此处提到的get_all_related_fields()方法在1.8中已被弃用。 从现在起它是get_fields()

>> from django.contrib.auth.models import User
>> User._meta.get_fields()

我发现添加到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
链接地址: http://www.djcxy.com/p/38723.html

上一篇: Django: Get list of model fields?

下一篇: Lucene, Sphinx, Postgresql, MySQL?