[错题笔记] 报错:‘sqlalchemy.orm.collections.InstrumentedList object‘ has no attribute ‘content‘

在尝试访问SQLAlchemy ORM中一对多关系的content属性时,遇到'InstrumentedList object'没有该属性的错误。问题源于user表与aboutme表的一对多关系。通过检查和调试,发现user.about是一个列表,而非预期的对象。解决方案是取列表的第一个元素,如`{{ user.about[0].content }}`,或调整模型为一对一关系。同时,对于可能出现的空列表情况,应在后端使用try-except进行异常处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

报错:jinja2.exceptions.UndefinedError: 'sqlalchemy.orm.collections.InstrumentedList object' has no attribute 'content'

一、报错前提:

1. 有一张表user和一张表aboutme,其中foreignkey写在了aboutme上

关于aboutme主要代码为:

class AboutMe(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    content = db.Column(db.BLOB, nullable=False)
    pdatetime = db.Column(db.DateTime, default=datetime.now)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    user = db.relationship('User', backref='abouts')

2. user与aboutme属于一对多关系

3. 当在模板接收content值时,出了报错

4.报错代码段:

<div id="container">
        <p>
            {% if not user.about %}
                用户中心设置更多关于我的信息~~~~
            {% else %}
                {
  
  { user.about.content | cdecode1 | safe }}
            {% endif %}
        </p>
    </di
python flask运行后报错[2025-03-18 08:41:05,126] ERROR in app: Exception on /user/login [POST] Traceback (most recent call last): File "E:\PythonFlask项目实战\95944qjw\.venv\lib\site-packages\sqlalchemy\util\_collections.py", line 1008, in __call__ return self.registry[key] KeyError: <greenlet.greenlet object at 0x000001E008975640 (otid=0x000001E008910DE0) current active started main> During handling of the above exception, another exception occurred: Traceback (most recent call last): File "E:\PythonFlask项目实战\95944qjw\.venv\lib\site-packages\flask\app.py", line 2447, in wsgi_app response = self.full_dispatch_request() File "E:\PythonFlask项目实战\95944qjw\.venv\lib\site-packages\flask\app.py", line 1952, in full_dispatch_request rv = self.handle_user_exception(e) File "E:\PythonFlask项目实战\95944qjw\.venv\lib\site-packages\flask\app.py", line 1821, in handle_user_exception reraise(exc_type, exc_value, tb) File "E:\PythonFlask项目实战\95944qjw\.venv\lib\site-packages\flask\_compat.py", line 39, in reraise raise value File "E:\PythonFlask项目实战\95944qjw\.venv\lib\site-packages\flask\app.py", line 1950, in full_dispatch_request rv = self.dispatch_request() File "E:\PythonFlask项目实战\95944qjw\.venv\lib\site-packages\flask\app.py", line 1936, in dispatch_request return self.view_functions[rule.endpoint](**req.view_args) File "E:\PythonFlask项目实战\95944qjw\blueprints\user.py", line 95, in login user = UserModel.query.filter_by(username=username).first() File "E:\PythonFlask项目实战\95944qjw\.venv\lib\site-packages\flask_sqlalchemy\__init__.py", line 514, in __get__ return type.query_class(mapper, session=self.sa.session()) File "E:\PythonFlask项目实战\95944qjw\.venv\lib\site-packages\sqlalchemy\orm\scoping.py", line 47, in __call__ sess = self.registry() File "E:\PythonFlask项目实战\95944qjw\.venv\lib\site-packages\sqlalchemy\util\_collections.py", line 1010, in __call__ return self.registry.setdefault(key, self.createfunc()) File "E:\PythonFlask项目实战\95944qjw\.venv\lib\site-packages\sqlalchemy\orm\session.py", line 4225, in __call__ return self.class_(**local_kw) File "E:\PythonFlask项目实战\95944qjw\.venv\lib\site-packages\flask_sqlalchemy\__init__.py", line 138, in __init__ bind = options.pop('bind', None) or db.engine File "E:\PythonFlask项目实战\95944qjw\.venv\lib\site-packages\flask_sqlalchemy\__init__.py", line 943, in engine return self.get_engine() File "E:\PythonFlask项目实战\95944qjw\.venv\lib\site-packages\flask_sqlalchemy\__init__.py", line 962, in get_engine return connector.get_engine() File "E:\PythonFlask项目实战\95944qjw\.venv\lib\site-packages\flask_sqlalchemy\__init__.py", line 555, in get_engine options = self.get_options(sa_url, echo) File "E:\PythonFlask项目实战\95944qjw\.venv\lib\site-packages\flask_sqlalchemy\__init__.py", line 570, in get_options self._sa.apply_driver_hacks(self._app, sa_url, options) File "E:\PythonFlask项目实战\95944qjw\.venv\lib\site-packages\flask_sqlalchemy\__init__.py", line 884, in apply_driver_hacks sa_url.query.setdefault('charset', 'utf8') AttributeError: 'sqlalchemy.cimmutabledict.immutabledict' object has no attribute 'setdefault' 127.0.0.1 - - [18/Mar/2025 08:41:05] "POST /user/login HTTP/1.1" 500 - 127.0.0.1 - - [18/Mar/2025 08:41:05] "GET /static/front/js/html5shiv.min.js HTTP/1.1" 404 - 127.0.0.1 - - [18/Mar/2025 08:41:05] "GET /static/front/js/respond.min.js HTTP/1.1" 404 - 127.0.0.1 - - [18/Mar/2025 08:41:05] "GET /static/front/js/skin/layer.css HTTP/1.1" 404 -
最新发布
03-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值