У объекта '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