В настоящее время я могу писать как свои сообщения, так и ответы в свою базу данных, но теперь я застрял в том, как отображать мои ответы на мои конкретные сообщения и как отображать сообщения с комментариями под ними. Любые советы помогают, особенно указатели на соответствующую документацию, касающуюся такой проблемы.
маршруты.py
@app.route("/post/new", methods=['GET', 'POST'])
@login_required
def new_post():
form = PostForm()
if form.validate_on_submit():
post = Post(title=form.title.data, content=form.content.data, author=current_user,)
db.session.add(post)
db.session.commit()
flash('New Post Created', 'success')
return redirect(url_for('home'))
return render_template('create_post.html', title='New Post', form=form, legend='New Post')
@app.route("/post/<int:post_id>")
def post(post_id):
post = Post.query.get_or_404(post_id)
return render_template('post.html', title=post.title, post=post,)
@app.route("/post/reply", methods=['GET', 'POST'])
@login_required
def new_reply():
form = ReplyForm()
if form.validate_on_submit():
reply = Reply(title=form.title.data, content=form.content.data, author=current_user,)
db.session.add(reply)
db.session.commit()
flash('reply posted', 'success')
return redirect(url_for('home'))
return render_template('Reply.html', title='New Reply', form=form, legend='New Reply')
post.html
{% block content %}
<article class = "media content-section">
<img class = "article-img" src = "{{ url_for('static', filename='profile_pics/' + post.author.image_file) }}">
<div class = "media-body">
<div class = "article-metadata">
<a class = "mr-2" href = "{{ url_for('user_posts', username=post.author.username) }}">{{ post.author.username }}</a>
<small class = "text-muted">{{ post.date_posted}}</small>
{% if post.author == current_user %}
<div>
<a class = "btn btn-secondary btn-sm mt-1 mb-1" href = "{{ url_for('update_post', post_id=post.id) }}">[ Update ]</a>
<a class = "btn btn-secondary btn-sm mt-1 mb-1" href = "{{ url_for('new_reply', post_id=post.id) }}">[ Reply ]</a>
<a class = "btn btn-secondary btn-sm mt-1 mb-1" href = "{{ url_for('delete_post', post_id=post.id) }}">[ Delete ]</a>
</div>
{% else %}
{% if current_user.is_authenticated %}
<div>
<a class = "btn btn-secondary btn-sm mt-1 mb-1" href = "{{ url_for('new_reply', post_id=post.id ) }}">[ Reply ]</a>
</div>
{% endif %}
{% endif %}
</div>
<h2 class = "article-title">{{ post.title }}</h2>
<p class = "article-content">{{ post.content }}</p>
</div>
</article>
{% endblock content %}
Когда вы загружаете сообщение в «сообщение», также загружайте комментарии, где внешний ключ из вашей базы данных сообщений соответствует первичному ключу вашего сообщения. Затем соберите шаблон. Довольно элементарные вещи...
{%for comment in post.comments%}
{%endfor%}
что вы имеете в виду, когда говорите «Определить комментарии-сообщения об отношениях как 1-ко-многим», у меня уже есть таблица БД под названием «ответ», я помню, что был пост от 2015 года о похожем вопросе, который у меня был, но я не могу Найди это.
Например, в этот файл Категория имеет отношение 1 ко многим с подкатегорией. Посмотрите, как это делается с помощью flask-sqlalchemy.
Если вы измените свою модель, чтобы связать комментарии и сообщения в отношениях «многие к одному», этого можно достичь. (много комментариев связано с одним постом)
from app import db
from flask_login import UserMixin
from datetime import datetime
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique = True)
email = db.Column(db.String(120), unique = True)
password = db.Column(db.String(500))
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100), nullable=False)
date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
content = db.Column(db.Text, nullable=False)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
class Reply(db.Model):
id = db.Column(db.Integer, primary_key=True)
post_id = db.Column(db.Integer, db.ForeignKey('post.id'), nullable=False)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
content = db.Column(db.Text, nullable=False)
date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
Теперь вы можете получить все ответы на сообщение, просто запросив таблицу ответов с помощью post_id
from .models import Reply
replies = Reply.query.filter_by(post_id=`your_post_id_here').all()
Вы можете взять этот список replies
и отобразить его в шаблоне.
С какой проблемой вы столкнулись?