2012-04-14 130 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