Django 2.1.2 - AttributeError: у объекта «UserProfile» нет атрибута «объект» - PullRequest
0 голосов
/ 29 октября 2018

У меня проблемы с классом с именем SearchView (ListView), который я использую для отображения поискового запроса. Этот класс "SearchView" наследуется от представления UserProfile, так что пользователи могут использовать панель поиска в представлении профиля для поиска любого сообщения. Когда я пытаюсь загрузить маршрут / пользователей ///, возникает следующая ошибка: у объекта «UserProfile» нет атрибута «объект». Я предполагаю, что это потому, что я переопределяю метод 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%}

Заранее спасибо.

1 Ответ

0 голосов
/ 29 октября 2018

попробуйте добавить self.object = self.get_object() к get_context_data. Поскольку для DetailView требуется атрибут object

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...