Проверяем авторизирован пользователь? Если да, то отдаём только те посты, где он является автором. <br/> Если же пользователь не авторизирован, то отдаём всё остальное по вашим фильтрам <br/> <pre><code class="python">class PostListView(ListMixin, ListView):model = Post
ordering = '-pub_date'
paginate_by = 10
template_name = 'blog/index.html'
def get_queryset(self):
queryset = super().get_queryset().all( ).annotate(comment_count=Count("comments"))
if self.request.user.is_authenticated # Проверяем пользователь авторизованный или нет
return queryset.filter(author=self.request.user)
return queryset.filter(category__is_published=True,
is_published=True,
pub_date__lte=timezone.now())</code></pre> <br/> <br/> get_object_or_404 - Достаёт только один объект, вы же хотите получить список, судя по названию класса. При этом если вдруг не найдётся ни одной записи, то будет вызвана принудительная ошибка 404. То есть далее ваш код выполняться не будет. <br/> <br/> Если же нужно проверить есть ли у авторизированного хоть один пост, в противном случае считаем его не "автором", то так: <br/> <br/> <pre><code class="python">def get_queryset(self):
queryset = super().get_queryset().all( ).annotate(comment_count=Count("comments"))
if self.request.user.is_authenticated # Проверяем пользователь авторизованный или нет
queryset = queryset.filter(author=self.request.user)
if not queryset: # либо можно так - if not len(queryset):
queryset = queryset.filter(category__is_published=True,
is_published=True,
pub_date__lte=timezone.now())
return queryset</code></pre> <br/> <br/> Но если у вас понятие "автор" определяется не только наличием созданных им постов. То лучше вносить в модель пользователей статус автор он или нет. <br/> <pre><code class="python">class User(models.Model):
....
is_author = models.BooleanField(default=False)
...</code></pre> <br/> И тогда проверка уже будет такой <br/> <br/> <pre><code class="python">...
def get_queryset(self):
queryset = super().get_queryset().all( ).annotate(comment_count=Count("comments"))
if self.request.user.is_authenticated and self.request.user.is_author:
return queryset.filter(author=self.request.user)
return queryset.filter(category__is_published=True,
is_published=True,
pub_date__lte=timezone.now())</code></pre> <br/> Естественно, если пользователь автор, но постов создать не успел, то ему вернётся пустой список.