Django中显示所有属于创建对象的属性值的方法?

asp*_*ing 3 django django-orm python-3.x

Django中是否有某种方法可以检索/显示属于通过Django创建的对象的所有属性的值?

在Python Shell中,我使用了以下命令:

>>> print(p.first_name, p.last_name, p.software_name)
Linus Torvalds Linux
Run Code Online (Sandbox Code Playgroud)

p是具有first_name,last_name,software_name属性的已创建对象。我已经创建了几个模型,这些模型已应用于mysql中的特定数据库。

我想学习其他显示此类信息的方法。

yhd*_*ung 26

Python内置的特殊属性object.__dict__可以检索对象的所有属性,作为字典。

p.__dict__
# returns {'first_name': 'Linus', 'last_name': 'Torvalds', 'software_name': 'Linux'}
Run Code Online (Sandbox Code Playgroud)

或者,使用 Python 内置函数vars(),它返回__dict__对象的 ,给出相同的结果。

vars(p)
Run Code Online (Sandbox Code Playgroud)

对于 QuerySet,您可以考虑显示 QuerySet 项之一的属性,例如:

q.first().__dict__
# or
vars(q.first())
Run Code Online (Sandbox Code Playgroud)

  • 这值得更多的赞成来解决第一个解决方案无法解决的其他情况 - 例如,当使用“.get”时 (2认同)

aru*_*ska 10

A bit late, but as none of the answers mentioned the easiest way to do that:

>>> # assuming your object was already saved in the database and p is the QuerySet
>>> # with your object
>>> p.values()
<QuerySet [{'first_name': 'Linus', 'last_name': 'Torvalds', 'software_name': 'Linux'}]>
Run Code Online (Sandbox Code Playgroud)

  • 当 QuerySet 有对象列表时,这对我有用。然而,当“p”是实际对象时,它告诉我它没有属性“values”。例如,如果适用于 `p = Model.objects.filter(&lt;condition&gt;)`,但如果 `p = Model.objects.filter(&lt;condition&gt;).first()` 则不起作用 (4认同)

小智 6

尝试使用内置的 python dir()方法

目录(对象)

  • `dir(object)` 返回属性名称的列表,但不包括属性值。 (2认同)

小智 -1

您可以使用 model_to_dict 函数。检查这个答案

该模块将其打包为 mixin:django-model-to-dict

一旦您的对象采用字典形式,打印或任何处理都应该更容易。