也许这个问题很简单,但我不知道如何总结,我会找到答案。
是否可以打印出模型的所有可用字段?
例如,在iPython中,我可以导入模型,只需写下模型名称,选项卡就会显示模型的所有可用字段。
在不使用某种shell的情况下,有可能在代码中做到这一点吗?
我想使用某种命令(例如print_fields(self)
)来获取模型内部的内容。
要检查模型上的字段,我通常使用?
:
>>> Person?
Type: ModelBase
Base Class: <class 'django.db.models.base.ModelBase'>
String Form: <class 'foo.bar.models.Person'>
Namespace: Interactive
File: /home/zk/ve/django/foo/bar/models.py
Docstring:
Person(id, first_name, last_name)
您也可以使用help()
。如果你有一个模型的实例,你可以看看__dict__
:
>>> [x for x in Person().__dict__.keys() if not x.startswith('_')]
<<< ['first_name', 'last_name', 'id']
如果您有模型实例,您可以简单地调用:
model_queryset.all().values()
https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.values
关于使用模型类本身的字段列表,请参阅Django:获取模型字段列表?
或者直接使用文档-对于Django 1.10,有一个专门的章节介绍如何使用字段:https://docs.djangoproject.com/en/1.10/ref/models/meta/#retrieving-全领域实例的a型
我认为您只想在模型的实例上使用__dict__
。(不过,它不会在ipython中提供诸如制表符完成之类的方法)。此外,通常使用__doc__
也很有帮助。
同时查看检查http://docs.python.org/library/inspect.html
也许可以试试这里建议的东西:
data = serializers.serialize("json", models.MyModel.objects.all(), indent=4)
JSON格式易于打印和读取;)
受@zeekay答案的启发,使用以下内容查看模型实例的字段和相应值:
[x for x in Cheese.objects.all()[0].__dict__.items() if not x[0].startswith('_')]
为什么不实现__unicode__
:
def __unicode__(self):
return self.whatever_field + self.another_field