gpt4 book ai didi

python - 如何引用尚未定义的类?

转载 作者:太空狗 更新时间:2023-10-30 02:45:16 25 4
gpt4 key购买 nike

我有以下两个类:

class Product(db.Model):
__tablename__ = 'product'

ProductID = db.Column(db.Integer, primary_key=True)
StartOperatorID = db.Column(db.Integer, db.ForeignKey('user.UserID'), nullable=False)
StartOperator = db.relationship("User", foreign_keys=[StartOperatorID])
WorkBenchID = db.Column(db.Integer, db.ForeignKey('workbench.WorkBenchID'))
WorkBench = db.relationship(WorkBench)


class WorkBench(db.Model):
__tablename__ = 'workbench'

WorkBenchID = db.Column(db.Integer, primary_key=True)

但是,我得到以下 NameError,因为 WorkBench 定义在 Product 下:

---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-1-3a482de7fdcf> in <module>()
----> 1 from example import models

/home/Sin5k4/example/models.py in <module>()
16
---> 17 class Product(db.Model):
18 ProductID = db.Column(db.Integer, primary_key=True)

/home/Sin5k4/example/models.py in Product()
21 WorkBenchID = db.Column(db.Integer, db.ForeignKey('workbench.WorkBenchID'))
---> 22 WorkBench = db.relationship(WorkBench)
23

NameError: name 'WorkBench' is not defined

来自 .NET 背景,我真的很难解决这个问题。定义与此类的关系的正确方法是什么?

最佳答案

当一个Python程序被解释时,类定义是按顺序执行的,包括类级别变量的定义(比如那个关系)。为了允许乱序定义关系,SQLAlchemy 除了直接传递类之外还有一些其他语义。事实上,您的一些其他关系已经在使用这种形式:传递字符串名称而不是类对象。您还可以传递一个对类对象求值的 lambda,两者都可以解决这个问题。

# by class name (preferred in most cases)
WorkBench = db.relationship('WorkBench')
# or by lambda
WorkBench = db.relationship(lambda: WorkBench)

关于python - 如何引用尚未定义的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25266461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com