Unable to get repr for <class 'django.db.models.query.QuerySet'>. Поиск по тегам в плагинах django
20 апреля 2015 г. 12:10
Захотелось мне реализовать поиск картинок по названию тега (Картинка - это мною написанный django-cms плагин; а теги - подключённое приложение taggit), но не тут-то было. Впрочем, всё по-порядку.
Во-первых, имеем модель:
# models.py class Picture(CMSPlugin): pic = models.ImageField(u'Картинка', upload_to='pictures', max_length=255) tags = TaggableManager(blank=True)
А во-вторых, нужно найти картинки по необходимому тегу. И если мы захотим осуществить поиск как-то так:
pictures = Picture.objects.filter(placeholder__page__publisher_is_draft=True).filter(tags__name=search_value)
то ничего не выйдет. Не сработает: Django сообщит Unable to get repr for <class 'django.db.models.query.QuerySet'>
.
Скажу честно, я так и не смог понять, почему код выше не работает.
Мне пришлось написать следующий код, чтобы решить мою задачу. Впрочем, он мне даже больше нравится! Быстрее работает: не нужно все картинки перебирать. А наоборот, проходимся по всем тегам и находим те теги, которые ссылаются на нужный нам объект через свойство content_object. PicturePlugin - это название моего плагина.
# views.py def search(request): if 'search_value' in request.GET: search_value = request.GET['search_value'] try: tag = Tag.objects.filter(name=search_value)[0] except IndexError: tag = None ctx = {'search_value': search_value} if tag: pictures = [] items = tag.taggit_taggeditem_items.all() for item in items: if hasattr(item.content_object, 'plugin_type'): # Если объект имеет свойство plugin_type, значит это плагин if item.content_object.plugin_type == 'SBPicturePlugin' and not item.content_object.placeholder.page.publisher_is_draft: # Ищем только в опубликованных страницах pictures.append(item.content_object) ctx.update({'pictures': pictures}) return render(request, 'search.html', ctx) return redirect('/')
Вот теперь работает!
Похожие статьи:
Представляю вашему вниманию книгу, написанную моим близким другом Максимом Макуриным: Секреты эффективного управления ассортиментом.
Книга предназначается для широкого круга читателей и, по мнению автора, будет полезна специалистам отдела закупок и логистики, категорийным и финансовым менеджерам, менеджерам по продажам, аналитикам, руководителям и директорам, в компетенции которых принятие решений по управлению ассортиментом.
Комментарии: 0