Python 有没有办法在peewee中获得一个模型的所有回溯?

Python 有没有办法在peewee中获得一个模型的所有回溯?,python,peewee,Python,Peewee,我有一个从peewee.Model继承的BaseModel类: class BaseModel(peewee.Model): # Base Model code 我的每个模型都继承自BaseModel。我的一些模型被其他模型引用为外键。每当我将它们作为外键引用时,我都会设置backref,例如: class Company(BaseModel): name = CharField(null=False) class User(BaseModel): name =

我有一个从peewee.Model继承的BaseModel类:

class BaseModel(peewee.Model):
     # Base Model code
我的每个模型都继承自BaseModel。我的一些模型被其他模型引用为外键。每当我将它们作为外键引用时,我都会设置backref,例如:

class Company(BaseModel):
     name = CharField(null=False)

class User(BaseModel):
     name = CharField(null=False)
     company = ForeignKeyField(Company, backref='users')

 class Campaign(BaseModel):
     name = CharField(null=False)
     created_by = ForeignKeyField(User, backref='campaigns')
     company = ForeignKeyField(Company, backref='campaigns')
给定一个对象,其类继承自BaseModel,我想要一个函数,该函数作为输出返回我可以使用的每个backref的列表。例如,如果给我一家公司,我希望[‘用户’、‘活动’]作为输出。如果它是一个用户,那么输出将是['campaigns']。最后,一场运动将返回[]


有什么方法可以实现这一点吗?

每个模型类都将backrefs存储在
ModelClass.\u meta.backrefs
ModelClass.\u meta.model\u backrefs
中。您可以递归地遍历这些

或者,您可以使用
ModelClass.\u meta.model\u图形(refs=False,backrefs=True)
,它返回一个三元组列表
(fk字段,model类,是\u backref)

类基(模型):
类元:
数据库=db
类用户(基本):
username=TextField()
类Tweet(基本):
user=ForeignKeyField(用户,backref='tweets')
类别标志(基本):
tweet=ForeignKeyField(tweet,backref='flags')
user=ForeignKeyField(user,backref='flags')
>>>用户.\u meta.backrefs
{: ,
: }
>>>用户.\u meta.model\u backrefs
defaultdict(列表,
{: [],
: []})
>>>用户.\u元模型\u图(refs=False,backrefs=True)
[(没有,没有),
(,没错),
(,没错),
(,对)]

就是这样!如果我在类中使用“for fk in self.\u meta.backrefs”进行迭代,我会得到引用它的外键。然后使用“fk.backref”,我得到了创建类时分配给backref的名称。
class Base(Model):
    class Meta:
        database = db

class User(Base):
    username = TextField()

class Tweet(Base):
    user = ForeignKeyField(User, backref='tweets')

class Flag(Base):
    tweet = ForeignKeyField(Tweet, backref='flags')
    user = ForeignKeyField(User, backref='flags')


>>> User._meta.backrefs
{<ForeignKeyField: Tweet.user>: <Model: Tweet>,
 <ForeignKeyField: Flag.user>: <Model: Flag>}

>>> User._meta.model_backrefs
defaultdict(list,
            {<Model: Tweet>: [<ForeignKeyField: Tweet.user>],
             <Model: Flag>: [<ForeignKeyField: Flag.user>]})

>>> User._meta.model_graph(refs=False, backrefs=True)
[(None, <Model: User>, None),
 (<ForeignKeyField: Tweet.user>, <Model: Tweet>, True),
 (<ForeignKeyField: Flag.user>, <Model: Flag>, True),
 (<ForeignKeyField: Flag.tweet>, <Model: Flag>, True)]