Python Flask中User类属性department找不到,如何解决?

新手上路,请多包涵

我是python新手,现在在制作一个问诊系统网站的一个子功能:预约挂号。我在User类中定义了department属性,并且在py文件中的路由中调用了这个属性,但运行后出现了找不到这个属性的报错。
AttributeError: type object 'User' has no attribute 'department'

这是我的路由代码:
if request.method == 'POST':

    doctor = User.query.get(doctor_id)
    if not doctor or doctor.department != session.get('selected_department'):
        flash('非法操作:医生不属于所选科室!', 'error')
        return redirect(url_for('appointment'))

    if 'department' in request.form:
        department = request.form.get('department')
        session['selected_department'] = department
        return redirect(url_for('appointment'))

这是我的数据库的相关代码:
from flask_sqlalchemy import SQLAlchemy # type: ignore

db = SQLAlchemy()

class User(db.Model):

 department = db.Column(db.String(50), nullable=True)
 def __repr__(self):
    return f'<User {self.username}>'
阅读 271
1 个回答

这是Python新手常遇到的一个坑!让我用简单的话解释一下。

根据错误信息 AttributeError: type object 'User' has no attribute 'department',问题可能是你在某处直接用了User.department而不是通过一个实例来访问它。

你贴的路由代码看起来是没问题的:

doctor = User.query.get(doctor_id)
if not doctor or doctor.department != session.get('selected_department'):

这部分写得对,因为你先获取了一个doctor对象,然后才访问它的department属性。

但我猜在其他地方你可能直接用了User.department。检查一下整个py文件,看看是不是有类似这样的代码?

几个常见的解决办法:

  1. 检查整个代码,确保只用"实例.属性"的方式访问department
  2. 确保你的数据库已经更新了,如果你是后来才加的department列,需要做数据库迁移
  3. 确保User类的定义是完整的,包含了id和其他必要的字段

如果还是找不到问题,可以把完整的错误信息(包括traceback部分)贴出来,这样我能看到具体是哪一行出错了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题