Лента новостей скрыта от пользователей, не являющихся администраторами

На моей платформе социальных сетей лента новостей (называемая post_list), похоже, скрыта от любого пользователя, который не является администратором.

Даже когда текст введен в поле и нажата кнопка 'post', страница обновляется, но текстовое поле не очищается и посты не появляются belowhand.

Если я вхожу в систему как администратор, лента появляется немедленно, как и все сообщения, которые я только что разместил с неадминского аккаунта и которые не появились на неадминском аккаунте. Как показано здесь.

Я только недавно добавил возможность делиться сообщениями, так что, возможно, это как-то повлияло на эту проблему.

(Лента новостей) post_list.html:

views.py:

models.py:

Любые советы о том, почему лента новостей может отображаться только на аккаунте администратора/появляться только ПОСЛЕ отправки сообщения (что было бы неудобно, если бы приходилось отправлять сообщение каждый раз, когда вы хотите просмотреть свою ленту новостей), будут очень признательны!

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

posts = Post.objects.filter(
            author__profile__followers__in=[logged_in_user.id]
        ).order_by('-created_on')

Похоже, что он показывает сообщения только для последователей user.id

Прежде всего, не следует завершать метод post() методом render. Это может привести к странным событиям во время загрузки сайта. Лучше используйте return self.form_valid(form) или то же самое с invalid. Возможно, вам понадобится наследовать также FormMixin. Тогда вам нужно указать get_success_url(), но я вижу, что вы знаете, как это сделать.

Во-вторых, если вы хотите, чтобы PostListView был представлением списка, сделайте это :) Затем используйте метод get_queryset():

class PostListView(LoginRequiredMixin, ListView):
    ...
    def get_queryset(self):
        return Post.objects.filter(...)

В-третьих, я не уверен насчет фильтра author__profile__followers__in=[logged_in_user.id]. Для меня он является запутанным. Может быть, попробовать другой подход для исправления фильтрации. Попробуйте .all() вместо .filter() и посмотрите, все ли правильно отображается.

Похоже, вы путаете отношения ManyToMany. Вы не должны использовать имя отношения так же, как имя поля, это работает прямо противоположным образом, как вы могли бы подумать. Почитайте об этом в Django's Docs.

Вернуться на верх