这代码中question=question为什么传递一个question,一个question类对象呢?
class AnswerComment(db.Model):
""" 回答的评论 """
__tablename__ = 'qa_answer_comment'
id = db.Column(db.Integer, primary_key=True) # 主键
# 评论内容
content = db.Column(db.String(512), nullable=False)
# 赞同人数
love_count = db.Column(db.Integer, default=0)
# 评论是否公开
is_public = db.Column(db.Boolean, default=True)
# 逻辑删除
is_valid = db.Column(db.Boolean, default=True)
# 创建时间
created_at = db.Column(db.DateTime, default=datetime.now)
# 最后修改的时间
updated_at = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now)
# 回复ID
reply_id = db.Column(db.Integer, db.ForeignKey('qa_answer_comment.id'), nullable=True)
# 关联用户
user_id = db.Column(db.Integer, db.ForeignKey('accounts_user.id'))
# 关联答案
answer_id = db.Column(db.Integer, db.ForeignKey('qa_answer.id'))
# 关联问题
q_id = db.Column(db.Integer, db.ForeignKey('qa_question.id'))
# 建立与用户的一对多属性
user = db.relationship('User', backref=db.backref('answer_comment_list', lazy='dynamic'))
# 建立与答案的一对多属性
answer = db.relationship('Answer', backref=db.backref('answer_comment_list', lazy='dynamic'))
# 建立与问题的一对多属性
question = db.relationship('Question', backref=db.backref('question_comment_list', lazy='dynamic'))@qa.route('/comments/<int:answer_id>', methods=['GET', 'POST'])
def comments(answer_id):
""" 评论 """
answer = Answer.query.get(answer_id)
if request.method == 'POST':
# 添加评论
try:
if not current_user.is_authenticated:
result = {'code': 1, 'message': '请登录'}
return jsonify(result), 400
# 1. 获取数据
content = request.form.get('content', '')
# 2. 保存到数据库
question = answer.question
comment_obj = AnswerComment(content=content,
user=current_user,
answer=answer,
question=question
)
db.session.add(comment_obj)
db.session.commit()
return '', 201
except Exception as e:
result = {'code': 1, 'message': '服务器正忙,请稍后重试'}
return jsonify(result), 400
else:
# 获取评论列表
passclass Answer(db.Model):
""" 问题的回答 """
__tablename__ = 'qa_answer'
id = db.Column(db.Integer, primary_key=True) # 主键
# 回答的内容详情
content = db.Column(db.Text, nullable=False)
# 逻辑删除
is_valid = db.Column(db.Boolean, default=True)
# 创建时间
created_at = db.Column(db.DateTime, default=datetime.now)
# 最后修改的时间
updated_at = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now)
# 关联用户
user_id = db.Column(db.Integer, db.ForeignKey('accounts_user.id'))
# 关联问题
q_id = db.Column(db.Integer, db.ForeignKey('qa_question.id'))
# 建立与用户的一对多属性
user = db.relationship('User', backref=db.backref('answer_list', lazy='dynamic'))
# 建立与问题的一对多属性
question = db.relationship('Question', backref=db.backref('answer_list', lazy='dynamic'))
@property
def love_count(self):
""" 点赞的数量 """
return self.answer_love_list.count()class Question(db.Model):
""" 问题 """
__tablename__ = 'qa_question'
id = db.Column(db.Integer, primary_key=True) # 主键
# 问题标题
title = db.Column(db.String(128), nullable=False)
# 问题描述
desc = db.Column(db.String(256))
# 问题图片
img = db.Column(db.String(256))
# 问题详情
content = db.Column(db.Text, nullable=False)
# 浏览人数
view_count = db.Column(db.Integer, default=0)
# 逻辑删除
is_valid = db.Column(db.Boolean, default=True)
# 排序
reorder = db.Column(db.Integer, default=0)
# 创建时间
created_at = db.Column(db.DateTime, default=datetime.now)
# 最后修改的时间
updated_at = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now)
# 关联用户
user_id = db.Column(db.Integer, db.ForeignKey('accounts_user.id'))
# 建立与用户的一对多属性,user.question_list
user = db.relationship('User', backref=db.backref('question_list', lazy='dynamic'))
@property
def get_img_url(self):
return 'medias/' + self.img if self.img else ''
@property
def comment_count(self):
""" 评论数量 """
return self.question_comment_list.filter_by(is_valid=True).count()
@property
def follow_count(self):
""" 关注数量 """
return self.question_follow_list.filter_by(is_valid=True).count()
@property
def answer_count(self):
return self.answer_list.filter_by(is_valid=True).count()
@property
def tags(self):
""" 文章的标签 """
return self.tag_list.filter_by(is_valid=True)
@property
def love_count(self):
""" 点赞的数量 """
return self.question_love_list.count()这代码中question=question为什么传递一个question,一个question类对象呢?
6
收起
正在回答 回答被采纳积分+1
1回答
好帮手慕小猿
2023-12-04 12:51:52
同学,你好!等号左侧的question 是个变量名可以随意写名,右侧等号的question 代表着与当前类(也可以理解为表) 的关系是一对多的关系,如下图是Question 与 Answer两个表之间的关系是一对多的关系,即一个问题可以有多个回答
class Question(db.Model):
""" 问题 """
__tablename__ = 'qa_question'
id = db.Column(db.Integer, primary_key=True) # 主键
title = db.Column(db.String(128), nullable=False)
desc = db.Column(db.String(256))
img = db.Column(db.String(256))
content = db.Column(db.Text, nullable=False)
view_count = db.Column(db.Integer, default=0)
is_valid = db.Column(db.Boolean, default=True)
reorder = db.Column(db.Integer, default=0)
created_at = db.Column(db.DateTime, default=datetime.now)
updated_at = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now)
user_id = db.Column(db.Integer, db.ForeignKey('accounts_user.id'))
class Answer(db.Model):
""" 问题的回答 """
__tablename__ = 'qa_answer'
id = db.Column(db.Integer, primary_key=True) # 主键
content = db.Column(db.Text, nullable=False)
is_valid = db.Column(db.Boolean, default=True)
created_at = db.Column(db.DateTime, default=datetime.now)
updated_at = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now)
user_id = db.Column(db.Integer, db.ForeignKey('accounts_user.id'))
q_id = db.Column(db.Integer, db.ForeignKey('qa_question.id'))
user = db.relationship('User', backref=db.backref('answer_list', lazy='dynamic'))
question = db.relationship('Question', backref=db.backref('answer_list', lazy='dynamic'))

question 表通过id 与answer表的q_id 相关联,question 表id 为1的记录在answer表中有两个回答,即q_id 值为1的所有记录,也就是answer表中id 为1和3的记录

祝学习愉快~
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星