Пытаюсь найти решение, которое не требует добавления большого количества условий и дополнительного кода, и не смогло найти в Интернете никаких ресурсов, которые бы отвечали моим конкретным потребностям c.
У меня есть веб-приложение в конечном итоге это будет простой форум и блог-сайт. Будут отдельные пользователи и учетные записи, где каждый пользователь может либо дружить, либо подписываться на других пользователей. Что должно произойти, так это то, что когда вы друг и / или подписываетесь на пользователя, любое опубликованное им обновление статуса должно отображаться на вашем домашнем экране.
Однако код показывает только статус тех, кого вы оба друзья. с и после, не, если вы только следите, а не друзья, и наоборот. Функция, которая возвращает результаты, как показано ниже -
def related_posts(self):
shown_posts = db.session.query(Status).join(followers, followers.c.followed_id == Status.user_id).join(
friends, friends.c.friend_id == Status.user_id).filter(
followers.c.follower_id == self.id, friends.c.user_id == self.id)
own_posts = Status.query.filter_by(user_id=self.id)
return own_posts.union(shown_posts).order_by(Status.timestamp.desc())
Этот код является частью класса User, который создает таблицу пользователя. Этот код ссылается на другой класс, который содержит статус ', опубликованный пользователями, и две вложенные таблицы, которые созданы, чтобы упростить отношения «многие ко многим» для друга и следовать функциональности.
Возвращенные результаты показаны в следующем представлении -
@bp.route('/', methods=['GET', 'POST'])
@bp.route('/index', methods=['GET', 'POST'])
def index():
form = StatusForm()
# if request.method == 'POST' and form.submit():
if form.validate_on_submit():
status = Status(body=form.status.data, author=current_user)
db.session.add(status)
db.session.commit()
flash('Your status has been updated!')
return redirect(url_for('main.index'))
user_status = Status.query.filter_by(user_id=current_user.id).order_by(Status.timestamp.desc()) if current_user.is_authenticated \
else Status.query.order_by(Status.timestamp.desc())
shown_posts = current_user.related_posts() if current_user.is_authenticated \
else None
return render_template('main/index.html', title='Welcome to the Blog!', form=form,
user_status=user_status, shown_posts=shown_posts)
Я не знаю, есть ли простой способ сделать это, и я просто скучаю по нему, но я прочитал документацию и искал в Интернете решение этой проблемы. Но то, что я нашел до сих пор, еще не решило проблему. Любая помощь очень ценится, и я надеюсь, что предоставил достаточно информации, чтобы это сделать.