2011-10-31 133 views
0

幫助!爲什麼我的兩個相同類型的django對象的行爲不同?

我有兩個對象,我在django中使用不同的技術創建;

>>> from django.contrib.contenttypes.models import ContentType 
>>> from myproject.models import Building 

方法A

>>> content_type = ContentType.objects.get(app_label='myproject', model='Building') 

>>> content_class = content_type.model_class() 

>>> content_query = content_class.objects.raw("Select * from pms_building where name like '%build%' ") 

>>> type(content_query) 

<class 'django.db.models.query.RawQuerySet'> 
>>> content_query[0] 
# error .... 
# Attribute: 'str' object has no attribute 'items' 

方法B

>>> bld = Building.objects.raw("Select * from pms_building where name like '%build%' ") 

>>> type(bld) 

<class 'django.db.models.query.RawQuerySet'> 

>>>bld[0] 
<Building: Building A> 

我的問題是,爲什麼同類型的兩個對象行爲不同?

迦特

+0

我的猜測會是兩個不同的__init__方法。使用dir(bld)和dir(content_query)來查看他們定義的內容。 –

+0

他們是一樣的。 – gath

回答

2

,當你調用content_query[0]只執行的SQL查詢,所以查詢將在這一點上,如果事情是錯content_class例如失敗。至少我注意到,你從第一行忘了objects

content_type = ContentType.objects.get(app_label='myproject', model='Building') 

編輯:我得到了「‘海峽’對象有沒有屬性‘項目’」的錯誤時,%-marks被錯誤地解釋。這固定它對我來說:

s = "%build%" 
content_query = content_class.objects.raw("Select * from pms_building where namelike %s", [s]) 
+0

*編輯*無關,固定,雖然我評論= P – Izkata

+0

對不起,錯字,已經省略了「對象」編輯問題,問題仍然存在 – gath

+0

@gath兩種方法都適合我。你使用的是什麼Django版本和數據庫? – Lycha

相關問題