Python / Django调试:打印模型包含数据

Python/Django debugging: print model's containing data

也许是个简单的问题,但我不知道如何总结才能找到答案。

是否可以打印出模型的所有可用字段?

例如,在IPython中,我可以导入模型,只需编写模型名称和选项卡就可以显示模型拥有的所有可用字段。

在代码中可以这样做而不使用某种shell吗?

我想使用某种命令(例如print_fields(self))来获取模型中的内容。


要检查模型上的字段,我通常使用?

1
2
3
4
5
6
7
8
>>> 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__

1
2
>>> [x for x in Person().__dict__.keys() if not x.startswith('_')]
<<< ['first_name', 'last_name', 'id']


如果您有模型实例,可以简单地调用:

1
model_queryset.all().values()

https://docs.djangoproject.com/en/dev/ref/models/queryset/django.db.models.query.queryset.values

有关使用模型类本身的字段列表,请参见django:get list of model fields?

或者直接参考文档-对于django 1.10,有一个专门的部分介绍如何使用字段:https://docs.djangoproject.com/en/1.10/ref/models/meta/retrieving-all-field-instances-of-a-model


我认为您只想在模型实例上使用__dict__。(不过,它不会提供像ipython中的制表符完成这样的方法)。使用__doc__通常也很有帮助。

还可以查看inspect http://docs.python.org/library/inspect.html


也许可以试试这里的建议:

1
data = serializers.serialize("json", models.MyModel.objects.all(), indent=4)

JSON格式易于打印和读取;)


为什么不实施__unicode__

1
2
def __unicode__(self):
    return self.whatever_field + self.another_field