Ошибка: 'Class_name' object has no attribute 'object_list'

Domohod45

Новичок
Пользователь
Дек 7, 2021
68
3
8
Пытаюсь использовать пагинатор Django, но происходит ошибка:

Код:
'Comment2' object has no attribute 'object_list'

line 274|    context = super(Comment2, self).get_context_data(**kwargs)

view:

Python:
class Comment2(TemplateView, ListView):
    template_name = "registration/comments.html"
    paginate_by = 2

    def get_context_data(self, **kwargs):
        context = super(Comment2, self).get_context_data(**kwargs)
        comment = Comment.objects.get(pk=1)
        context['comment'] = comment
        return context

Как исправить ошибку?
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Как исправить ошибку?
Ошибка возникает потому, что не определен queryset. Исправить можно с помощью переопределения метода get_queryset:
Python:
class Comment2(ListView):
    template_name = "registration/comments.html"
    paginate_by = 2
    context_object_name = 'comment'
    
    def get_queryset(self):
        return Comment.objects.get(pk=1)
 

Domohod45

Новичок
Пользователь
Дек 7, 2021
68
3
8
Ошибка возникает потому, что не определен queryset. Исправить можно с помощью переопределения метода get_queryset:
Ошибка остается.

Код:
class Comment2(TemplateView, ListView):
    template_name = "registration/comments.html"
    paginate_by = 2
    context_object_name = 'comment'

    def get_context_data(self, **kwargs):
        context = super(Comment2, self).get_context_data(**kwargs)
        comment = Comment.objects.get(pk=1)
        context['comment'] = comment
        return context

    def get_queryset(self):
        return Comment.objects.get(pk=1)
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Ошибка остается.
Я выше привел пример как нужно переписать код чтобы не было ошибки.
Не нужно наследоваться от TemplateView (оставьте только ListView).
Не нужно переопределять метод get_context_data, поле context_object_name добавит экземпляр класса Comment в контекст.
 

Domohod45

Новичок
Пользователь
Дек 7, 2021
68
3
8
Я выше привел пример как нужно переписать код чтобы не было ошибки.
Спасибо, однако теперь такая ошибка: object of type 'Comment' has no len()
Нужно добавить len() в параметры модели?
model:
Python:
class Comment(models.Model):
    title = models.CharField(max_length=30, default="tit")

    def get_absolute_url(self):
        return reverse("comment")
 
Последнее редактирование:

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
object of type 'Comment' has no len()
Видимо вы в шаблоне пытаетесь итерироваться по объекту Comment.
Покажите код шаблона.
 

Domohod45

Новичок
Пользователь
Дек 7, 2021
68
3
8
Покажите код шаблона.
HTML:
<div class="div_button" align="right">
<button id="toggleThemeBtn" class="none_but" class="loud-link-click" type="button">
<audio src="{% static 'CSS/out.mp3' %}"></audio>
<img onclick="soundClick()" src="{% static 'IMG/voting_blahite_comment.png' %}" alt="" width="50" class="img_button">
</button>
</div>

<div style="width: 120px; position: absolute; left: 8px; top: -10px;" class="back">
<a href="{% url 'home' %}" class="backProfileUrl"><h1 class="s"> <span class="b_c" >⮪</span> Back</h1></a>
</div>

<h3 align="center"><big>{% trans "Since you didn't vote, you will be shown the first 50 comments." %}</big></h3>

<div class="container-fluid mt-4 comment-form">
{% render_comment_form for comment %}
</div>

{% get_comment_count for comment as comment_count %}
{% if comment_count %}
<hr class="hr">

<div class="">
{% render_xtdcomment_tree for comment allow_flagging allow_feedback show_feedback %}
</div>
{% endif %}

<div>
{% include 'includes/pagination.html'%}
</div>
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Скорее всего проблема во вложенном шаблоне {% include 'includes/pagination.html'%}.
Попробуйте убрать эту строку и скорее всего ошибки не будет.
 

Domohod45

Новичок
Пользователь
Дек 7, 2021
68
3
8
Попробуйте убрать эту строку и скорее всего ошибки не будет.
Ошибка пропадает, если убрать paginate_by = 2 и {% include 'includes/pagination.html'%}. Но мне ведь необходим пагинатор, что делать?
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Но мне ведь необходим пагинатор, что делать?
Как я понял вам нужен пагинатор не по экземплярам класса модели Comment, так как он у вас передается в шаблон всего 1 и итерироваться по нему нельзя, а по комментам, которые прикрепляются к данному экземпляру через django-comments-xtd.
Для этого нужно посмотреть как реализовать пагинацию в документации django-comments-xtd.
 
  • Мне нравится
Реакции: Domohod45

Форум IT Специалистов