У меня проблемы с классом SearchView (ListView), который я использую для отображения поискового запроса. Этот класс SearchView наследуется от представления UserProfile, поэтому пользователи могут использовать панель поиска в представлении профиля для поиска любого сообщения. Когда я пытаюсь загрузить маршрут / пользователей ///, возникает следующая ошибка: объект UserProfile не имеет объекта attribute. Думаю, это потому, что я переопределяю метод get_context_data ().
Это код класса SearchView:
class SearchView(ListView):
model = Post
def get_context_data(self, *args, **kwargs):
context = super().get_context_data(**kwargs)
try:
context['list_result'] = self.result
except:
messages.error(self.request, 'test')
finally:
return context
def get(self, request, *args, **kwargs):
if request.GET.get('search'):
search_query = request.GET.get('search', None)
self.result = Post.objects.filter(title__icontains=search_query).order_by()
if not self.result:
messages.error(request, f'No results found for {search_query}')
return super().get(request, *args, **kwargs)
Это код представления UserProfile:
@method_decorator(login_required, name='dispatch')
class UserProfile(SearchView, DetailView):
model = User
context_object_name = 'user_object'
def get_context_data(self, **kwargs):
data = super().get_context_data(**kwargs)
try:
relevant_post = Post.objects.filter(author_id=self.kwargs.get('pk')).order_by('-rating')[0]
data['relevant_post'] = relevant_post
except IndexError:
pass
finally:
return data
Это шаблон поиска:
{% extends 'blog/base.html' %}
{% load static %}
{% block content %}
<form class = "align-middle w-50" type = "GET" style = "margin: 0">
<span class = "fa fa-search form-control-feedback"></span>
<input type = "text" class = "form-control" name = "search"
placeholder = "Search ..">
</form>
{% if list_result %}
<h2>Results: </h2>
{% for result in list_result %}
<div class = "container">
<article class = "media content-section">
<div class = "media-body">
<div class = "article-metadata">
<img class = "rounded-circle article-img" src = "{{ result.author.profile.image.url }} "/>
<a class = "mr-2" href = "{% url 'profile' result.author.id result.author.username %}">{{ result.author }}</a>
<small class = "text-muted">{{ result.post_date|date:"N d, o" }} . </small>
<div class = "float-right mt-1">
<img src = "{% static 'blog/rating_icon.svg' %}" alt = "Ratings">
<div></div>
<medium class = "ml-2">{{ result.rating }}</medium>
</div>
<h2><a class = "article-title" href = "{% url 'post-detail' result.id result.title %}">{{ result.title }}</a></h2>
<a href = "{% url 'post-detail' result.id result.title%}">
Click here for more details.
</a>
</div>
</div>
</article>
</div>
{%endfor%}
{%endif%}
{%endblock%}
Заранее спасибо.
попробуйте добавить self.object = self.get_object()
в get_context_data
. Поскольку для DetailView требуется атрибут object
Это
.objects
, а не.object
.