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(<condition>)
,但如果 p = Model.objects.filter(<condition>).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中显示属于创建对象的所有属性值的方法?的主要内容,如果未能解决你的问题,请参考以下文章