【问题标题】:Method in Django to display all attributes' values belonging to a created object?Django中显示属于创建对象的所有属性值的方法?
【发布时间】: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)) 可能会帮助你..
  • 没用。

标签: django python-3.x django-orm


【解决方案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

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

    【讨论】:

      猜你喜欢
      • 2019-03-04
      • 1970-01-01
      • 1970-01-01
      • 2018-12-28
      • 2016-09-18
      • 1970-01-01
      • 1970-01-01
      • 2012-04-18
      • 2018-06-28
      相关资源
      最近更新 更多