这代码中question=question为什么传递一个question,一个question类对象呢?

这代码中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:
        # 获取评论列表
        pass
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'))

    @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类对象呢?

正在回答 回答被采纳积分+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'))


数据库表对应的数据如下:

https://img1.sycdn.imooc.com/climg/656d50fb0911251711950216.jpg

https://img1.sycdn.imooc.com/climg/656d5174095dbcca13720172.jpg

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

https://img1.sycdn.imooc.com/climg/656d5a2109c98f7011860309.jpg

祝学习愉快~

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师