帮助!
我在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 :(得分: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])