Django:如何打印模型实例所有字段的值?

问题描述 投票:0回答:3

例如,如果我尝试打印表中的前五行 (

print Artist.objects.all()[:5]
),我会得到:

[<Artist: Artist object>, <Artist: Artist object>, <Artist: Artist object>, <Artist: Artist object>, <Artist: Artist object>]

为什么它打印“占位符”值而不是实际的字段值?

python django
3个回答
35
投票

Django 使用 ORM(对象关系映射器)在 Python 对象和数据库行之间来回转换数据。因此,当您使用它从数据库获取项目时,它会将其转换为 Python 对象。

如果该对象没有定义如何将自身显示为文本,Django 会为您完成。 Python 也做同样的事情:

>>> class MyObject(object):
...     pass
... 
>>> [MyObject(), MyObject()]
[<__main__.MyObject object at 0x0480E650>,
 <__main__.MyObject object at 0x0480E350>]

如果您想查看每个对象的行的所有实际值,请使用

values

这是文档中的示例:

# This list contains a Blog object.
>>> Blog.objects.filter(name__startswith='Beatles')
[<Blog: Beatles Blog>]

# This list contains a dictionary.
>>> Blog.objects.filter(name__startswith='Beatles').values()
[{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}]

8
投票

更新:Python 3.x 中,使用

__str__
而不是
__unicode__

您看到的是 Artist 模型实例的列表。您的值位于 python 对象中。如果您想让这些实例的表示更有帮助,您应该定义

__unicode__
方法,让它们打印有用的内容:

https://docs.djangoproject.com/en/dev/ref/models/instances/?from=olddocs#unicode

它不是占位符。它是实际对象的表示形式,已转换为 unicode。


0
投票

如果您想使用

print
,那么 覆盖模型本身中的
__unicode__
方法:

class unit(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=255)

    def __unicode__(self):
        return u'%s' % (self.name)

print(unit.objects.all())

输出:

[unit: KG, unit: PCs]
© www.soinside.com 2019 - 2024. All rights reserved.