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

Posted

技术标签:

【中文标题】Django中显示属于创建对象的所有属性值的方法?【英文标题】:Method in Django to display all attributes' values belonging to a created object? 【发布时间】:2018-06-16 07:48:18 【问题描述】:

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

在 Python shell 中,我使用了以下代码:

>>> print(p.first_name, p.last_name, p.software_name)
Linus Torvalds Linux

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

我想了解其他显示此类信息的方式。

【问题讨论】:

print(dir(p)) 可能会帮助你.. 没用。 【参考方案1】:

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

p.__dict__
# returns 'first_name': 'Linus', 'last_name': 'Torvalds', 'software_name': 'Linux'

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

vars(p)

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

q.first().__dict__
# or
vars(q.first())

【讨论】:

这值得更多的支持来解决第一个解决方案无法解决的其他情况 - 例如当使用.get 是的,这几乎是我在看到这个问题的标题时所想象的。来自我的 +1。【参考方案2】:

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

目录(对象)

【讨论】:

dir(object) 返回属性名称列表,但不包括属性值。【参考方案3】:

有点晚了,但没有一个答案提到最简单的方法:

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

【讨论】:

当 QuerySet 有一个对象列表时,这对我有用。但是,当p 是实际对象时,它告诉我它没有属性values。例如,如果适用于 p = Model.objects.filter(&lt;condition&gt;),但如果 p = Model.objects.filter(&lt;condition&gt;).first() 这不起作用 是的,这就是为什么我在上面的评论中提到了assuming (...) p is the QuerySet with your object"values() 仅适用于查询集。您可以过滤一个只有一个对象的 QuerySet。【参考方案4】:

您可以为相应的模型类定义__str__方法,如下所示。

class User(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    software_name = models.CharField(max_length=100)

    def __str__(self):
        return self.first_name + " " + self.last_name + " " + self.software_name

假设您的第一个条目是 Linus Torvalds Linux 在您的数据库中,您可以像在 django Shell 上那样实现您的愿望。

from main_app.models import User
e = User.objects.get(pk=1)
e

【讨论】:

【参考方案5】:

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

此模块将其打包为一个 mixin :django-model-to-dict

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

【讨论】:

以上是关于Django中显示属于创建对象的所有属性值的方法?的主要内容,如果未能解决你的问题,请参考以下文章

Django 1.9 在列表中查找属性等于某个值的对象

Django之views视图函数

Django 模板:有没有办法根据其属性查询特定对象(而不是遍历所有对象)?

django-QueryDict 对象

django不返回QuerySets的API

python 打印对象的所有属性值的方法