18

所以我已经成功地将 Django 连接到一个预先存在的数据库(检查、验证和同步),并且我已经创建了一个应用程序和一个项目以及所有这些(我正在阅读 Django 书,我在第 5 章),但是当我实际运行它并打印东西时,我得到一个(假定的)错误。在 python 中,我正确地导入了我需要的内容(from myapp.models import Artist),但是如果我尝试打印,例如,表中的前五行(print Artist.objects.all()[:5]),我得到这个:

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

为什么它实际上不打印值而不是看起来是占位符?我在这里缺少什么吗?

4

3 回答 3

27

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.'}]
于 2012-04-14T01:45:15.620 回答
7

更新:Python 3.x中,使用__str__代替__unicode__

您看到的是 Artist 模型实例的列表。您的值在 python 对象中。如果你想让这些实例的表示更有帮助,你应该定义__unicode__方法让它们打印有用的东西:

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

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

于 2012-04-14T01:46:08.427 回答
0

如果您想使用打印方法,请在模型本身中使用unicode方法

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

这是一个示例模型

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]
于 2012-04-14T15:42:52.220 回答