Python/Django 调试:打印模型数据内容

33 投票
6 回答
40621 浏览
提问于 2025-04-16 18:41

这可能是个简单的问题,但我不知道怎么总结才能找到我的答案。

有没有办法打印出模型中所有可用的字段?

比如在iPython中,我可以导入模型,然后只要写上模型的名字,按下Tab键就能看到这个模型所有的字段。

有没有办法在代码中做到这一点,而不需要使用什么命令行?

我想用某种命令(比如 print_fields(self))来查看模型里面有什么。

6 个回答

11

我觉得你只需要在模型的实例上使用 __dict__。不过要注意,这样做不会像在ipython中那样提供方法的自动补全功能。另外,使用 __doc__ 通常也很有帮助。

你还可以看看 inspect 这个模块,链接在这里:http://docs.python.org/library/inspect.html

25

如果你已经有了模型实例,你可以直接调用:

model_queryset.all().values()

想要获取模型类本身的字段列表,可以查看这个链接:Django: 获取模型字段列表?

或者直接查看文档——对于Django 1.10,有一个专门的部分讲解如何处理字段:https://docs.djangoproject.com/en/1.10/ref/models/meta/#retrieving-all-field-instances-of-a-model

24

为了检查一个模型中的字段,我通常会用 ?:

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

撰写回答