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

时间:2011-05-31 15:44:05

标签: python django debugging printing

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

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

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

是否可以在不使用某种shell的情况下在代码中执行此操作?

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

6 个答案:

答案 0 :(得分:16)

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

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

答案 1 :(得分:6)

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

model_queryset.all().values()

https://docs.djangoproject.com/en/dev/ref/models/querysets/#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

答案 2 :(得分:5)

我认为您只想在模型实例上使用__dict__。 (虽然不会在ipython中提供像tab完成的方法)。使用__doc__通常也非常有用。

另请参阅检查http://docs.python.org/library/inspect.html

答案 3 :(得分:2)

也许尝试something suggested here

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

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

答案 4 :(得分:0)

为什么不实施__unicode__

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

答案 5 :(得分:0)

受@zeekay 的回答启发,使用以下内容查看模型实例的字段和对应值:

[x for x in Cheese.objects.all()[0].__dict__.items() if not x[0].startswith('_')]