Python 非SQL相关属性添加到SQLAlchemy模型错误

Python 非SQL相关属性添加到SQLAlchemy模型错误,python,postgresql,class,flask,sqlalchemy,Python,Postgresql,Class,Flask,Sqlalchemy,我正在用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.

我正在用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')
错误摘要:用户计数属性不是公司模型的一部分

我想从公司模型中动态获取用户数量。属性应该统计模型每次调用的用户数,并使用常规属性(如company.user\u 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
就像这样:

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
就像这样:

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
所有三个版本都会抛出相同的错误。我怎样才能克服这个问题


非常感谢

您可以使用以下属性:

class User(Base):
    ...
    @property
    def user_count(self):
        return len(self.users)

你好我试过@property,效果很好。如何直接调用属性。但仍然存在一个问题。我想用它来按方法排序。我使用order_bycastCompany.user_count,Integer,但它会抛出AttributeError:“int”对象没有属性“get_children”错误。如果我使用Company.id尝试相同的代码,它会工作。因此,新的财产在某种程度上与其他财产不同。注意:我还尝试了@hybrid_属性,结果如下same@CarnageTR当然不同了;它在SQL中不是一个真正的列!如果您需要按用户数量订购,则按性能顺序有三个选项:1。使用子查询,即按用户选择计数*订购,其中users.company\u id=companys.id;2.使用加入和聚合,例如,从SELECT*中选择*作为cnt,从users上的company_id=COMPANYS.id GROUP BY COMPANYS.id subq ORDER BY subq.cnt上的COMPANYS join users中计算*作为cnt;3.取消用户计数列的规范化,并在每次添加或删除用户时更新计数。