我正在使用python和flask开发一个Web应用程序。我使用Flask,SQLAlchemy和PostgreSQL进行开发。我有多对一的相关模型。通过这种模式,一家公司可以拥有许多用户,但每个用户只能拥有一家公司。
models.py
class Company(ResourceMixin, db.Model):
__tablename__ = 'companies'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), unique=True, index=True,
nullable=False, server_default='')
phone = db.Column(db.String(24))
email = db.Column(db.String(255), index=True)
address = db.Column(db.String(255))
# Relations
users = db.relationship('User', backref='company')
class User(UserMixin, ResourceMixin, db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
# User details
name = db.Column(db.String(50), index=True)
phone = db.Column(db.String(24))
address = db.Column(db.String(255))
email = db.Column(db.String(255), unique=True, index=True, nullable=False,
server_default='')
password = db.Column(db.String(128), nullable=False, server_default='')
# Relations
company_id = db.Column(db.Integer, db.ForeignKey('companies.id',
onupdate='CASCADE',
ondelete='SET NULL'),
index=True)
views.py
app.route('/')
def index():
company = Company.query.get(1)
flash(company.name, company.user_count)
return render_template('index.html')
错误摘要:“user_count”属性不属于公司模型。
我想从公司模型中动态获取用户数。属性应该在每次调用模型时对用户进行计数,并在常规属性(如company.user_count)上提供。我是通过创建一个类方法并在视图函数中调用它来实现的,但我希望它能在不使用属性之前调用方法的情况下自动生成进程。
我尝试了 init 这样的功能:
def __init__(self):
self.user_count = len(self.users)
就像这样:
def __init__(self):
self.status()
def status(self):
self.user_count = len(self.users)
return True
就像这样:
def __init__(self):
self.status()
@classmethod
def status(self):
self.user_count = len(self.users)
return True
所有三个版本都会抛出相同的错误。我怎样才能克服这个问题。
非常感谢!
答案 0 :(得分:0)
您可以使用属性:
class User(Base):
...
@property
def user_count(self):
return len(self.users)