2012-04-14 89 views
8

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

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

为什么没有实际上是打印值而不是似乎是占位符的东西?有什么我在这里失踪?

回答

11

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.'}] 
+0

看到这个答案后,用印刷方法 ovveride的的Unicode方法,我想知道这是他的问题的方向与我的回答相反。 – jdi 2012-04-14 01:47:48

+0

@jdi你的回答激励我加入一个解释,他为什么看到他所看到的,以及如何获得实际的行数据:) – agf 2012-04-14 01:50:38

+0

好吧,现在你有整个小猫 - kaboodle! – jdi 2012-04-14 01:52:09

5

UPDATE:Python 3.x都有,使用__str__代替__unicode__

你们看到的是艺术家的名单模型实例。你的值是在一个python对象中。如果你想使这些情况下的表现更有帮助,你应该定义__unicode__方法为他们打印一些有用的东西:

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

它不是一个占位符,它的实际对象的代表性,转换为unicode 。

+0

啊,我们走了。我刚刚定义了艺术家的Unicode,并再次尝试了它,谢谢! :D – 2012-04-14 01:54:38

+0

@加贝:哦,真的,我真的走在正确的轨道上。我在想AGF可能一直在处理你真正想要的东西。 – jdi 2012-04-14 01:56:54

0

如果你想在模型本身

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] 
+0

请帮我理解一下如何从'[单位:KG,单位:PCs]' 中删除型号名称'unit',在for循环中我想打印如下:'A from KG' 'B从个人计算机'这里'A,B'将来自另一个模型和'KG,PC'来自模型'单元'。 – 2015-09-11 10:27:25

+0

这是一个单独的问题,不是注释,我们需要查看更多的代码。 – 2017-05-15 06:13:41