为什么我的两个相同类型的django对象表现不同?

时间:2011-10-31 13:35:30

标签: python 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>

我的问题是为什么同一类型的两个对象表现不同?

加特

1 个答案:

答案 0 :(得分:2)

只有在调用content_query[0]时才会执行SQL查询,因此如果content_class出现问题,查询将在此时失败。至少我注意到你忘记了第一行的objects

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

编辑:当错误地解释%-marks时,我得到“'str'对象没有属性'items'”错误。这为我解决了这个问题:

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