请问为什么这里不能取到user模型中的nickname字段?

请问为什么这里不能取到user模型中的nickname字段?

这里是我自己写的首页,默认展示第一条回答,第一条回答包括用户的昵称和回答内容。

视图函数:http://img1.sycdn.imooc.com//climg/60aa1a29093c085014130403.jpg

index.html:http://img1.sycdn.imooc.com//climg/60aa1a52099a4f7612500411.jpg

模型:

class Answer(db.Model):
"""问题的回答"""
   __tablename__ = 'qa_answer'
   id = db.Column(db.Integer, primary_key=True, autoincrement=True)
# 外键,关联用户
   user_id = db.Column(db.Integer, db.ForeignKey('accounts_user.id'))
# 外键,关联问题
   q_id = db.Column(db.Integer, db.ForeignKey('qa_question.id'))
# 回答简述
   desc = db.Column(db.String(256), nullable=False)
# 回答内容
   content = db.Column(db.Text, nullable=False)
# 是否有效
   is_valid = db.Column(db.SmallInteger, default=constants.IfValid.VALID.value)
# 回答的时间
   answered_at = db.Column(db.DateTime, default=datetime.now)
# 最后修改回答的时间
   updated_at = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now)

# 建立与用户的一对多属性,user.answer_list
   user = db.relationship('User', backref=db.backref('answer_list', lazy='dynamic'))
# 建立与问题的一对多属性,question.answer_list
   question = db.relationship('Question', backref=db.backref('answer_list', lazy='dynamic'))

随之报错http://img1.sycdn.imooc.com//climg/60aa1a8209e337bf11540124.jpg


然后我将nickname去掉,发现却能取到user?,加上nickname字段就报None的错误,这是为什么?http://img1.sycdn.imooc.com//climg/60aa1ae60919d6ac13290406.jpg

http://img1.sycdn.imooc.com//climg/60aa1af7098d6c2810580417.jpg

不明白自己哪里出错了

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学,你好!视图函数中传递的是page_data数据,同学在HTML中并没有使用传递过来的数据,而是又去查询Question.answer_list.filter_by(),可尝试修改为和视图函数一致Question.query.filter_by(),或者直接使用视图函数传递过来的page_data,参考以下代码:

http://img1.sycdn.imooc.com//climg/60aa355e0972baf511390409.jpg

祝:学习愉快!

  • 慕神3107089 提问者 #1

    你仔细看,我循环遍历了page_data.items的数据,是使用了的。。我就想知道为啥取得到user对象,取不到user.nickname?

    2021-05-23 19:05:34
  • 慕神3107089 提问者 #2

    而且我是去查询的是question.answer_list,question就是使用的遍历page_data.items中的数据

    2021-05-23 19:12:41
  • 好帮手慕美 回复 提问者 慕神3107089 #3

    ​同学,你好!

    1、同学可以看下每个问答是否都有对应的回答,若没有对应的回答,则first_answer的值为None,在获取user时是获取不到的,所以在获取nickname时报错

    http://img1.sycdn.imooc.com//climg/60ab0c8f098756fb04580382.jpg

    只有前7条问题有回答,所以第一页中的后三条数据中first_answer的值为None

    http://img1.sycdn.imooc.com//climg/60ab0d61092d7dc110350692.jpg

    2、根据同学提供的部分代码,复现后得出的是第1条中的结果,只有问答下有对应的answer,才可以获取到对应的user中的nickname

    复现后的代码如下:

    http://img1.sycdn.imooc.com//climg/60ab0d980943892413260220.jpg

    http://img1.sycdn.imooc.com//climg/60ab0dd30911dda114870719.jpg

    3、同学可以根据上述代码修改并为每个问答添加回答记录,若还是有问题,同学可将html中的代码提供下,同学提供的不完整

    祝学习愉快!

    2021-05-24 10:23:34
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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