У объекта 'HitCountDetailView' нет атрибута 'category'

Я пытаюсь добавить дополнительный контекст, который выполняет фильтрацию, к моему DetailView. Выдается ошибка, что у объекта представления нет атрибута category

модель

class Post(models.Model):
    title = models.CharField(max_length=200)
category = models.ForeignKey('Category', on_delete=models.SET_NULL, null=True, blank=True)
    slug = models.SlugField(max_length=100, unique=True, editable=True)

view.py

class HitCountDetailView(HitCountDetailView):
    model = Post
    template_name = 'detail.html'
    context_object_name = 'post'
    slug_field = 'slug'
    count_hit = True

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['similar_posts'] = Post.objects.filter(category=self.category).exclude(slug=self.slug)
        return context


**urls.py**


```python
    path('detail/<slug>/', HitCountDetailView.as_view(), name='post-detail')

Вы должны фильтровать с помощью self.object.category, а не self.category, и self.object.slug, а не self.slug. Таким образом, вы можете реализовать это с помощью:

def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    context['similar_posts'] = Post.objects.filter(
        category=self.object.category
    ).exclude(pk=self.object.pk)
    return context

Вы можете оптимизировать эффективность, делая запрос по самому объекту, а не по его категории:

def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    context['similar_posts'] = Post.objects.filter(
        category__post=self.object
    ).exclude(pk=self.object.pk)
    return context
Вернуться на верх