#python #django
#python #джанго
Вопрос:
Помогите!
У меня есть два объекта, которые я создал, используя разные методы в 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. Я предполагаю, что это будут два разных метода инициализации . Используйте dir(bld) и dir(content_query), чтобы увидеть, что они определили.
Ответ №1:
SQL-запрос выполняется только при вызове content_query[0]
, поэтому в этот момент запрос завершится ошибкой, если, например, что-то content_class
не так с. По крайней мере, я заметил, что вы забыли objects
с первой строки:
content_type = ContentType.objects.get(app_label='myproject', model='Building')
РЕДАКТИРОВАТЬ: я получаю ошибку «объект ‘str’ не имеет атрибута ‘items'», когда%-метки неправильно интерпретируются. Это исправило это для меня:
s = "%build%"
content_query = content_class.objects.raw("Select * from pms_building where namelike %s", [s])
Комментарии:
1. РЕДАКТИРОВАТЬ не имеет значения, исправлено, пока я комментировал = P
2. извините за опечатку, я не включил «объекты», отредактировал вопрос, проблема все еще остается
3. @gath Оба метода работают для меня. Какую версию Django и DB вы используете?
4. @gath Я получил эту ошибку при использовании LIKE с%-chars , проверьте мою правку.