gpt4 book ai didi

python - 模型拆分为多个文件的 Flask,如何防止循环导入?

转载 作者:行者123 更新时间:2023-12-05 06:53:15 24 4
gpt4 key购买 nike

我遇到了循环导入的问题,我不确定如何重组我的代码来克服它。

假设我有结构

├── app
│ ├──__init__.py
│ ├── models_one.py
│ ├── models_two.py

models_one.py 如下:

from . import db
from .models_two import Post

class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique=True, index=True)
posts = db.relationship("Post")

def get_user_posts_with_content(self, passed_content):
return Post.query.filter(Post.user_id==self.id, Post.content==passed_content).all()

models_two.py 如下:

from . import db
from .models_one import User

class Post(db.Model):
__tablename__ = 'posts'
id = db.Column(db.Integer, primary_key=True)
content = db.Column(db.String(64))
user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)

def get_user(self):
return User.query.filter(User.id == self.user_id).first()

这会创建一个循环导入,有没有办法在不将两个类放在同一个文件中的情况下执行此操作?如果我在 models.py 中都有这两个,这会起作用,但对于具有 30 个模型的更大项目,我需要一种更好的方法来将它们全部分割。

我知道您可以通过调用 User.posts 获取此示例中的所有“帖子”,但在用户模型中您可以看到我如何使用传递的变量作为查询的一部分,我的项目使用了很多这个诸如此类。

我也知道这是因为在这两个类中我都有一个函数调用另一个对象的查询,但这简化了一些模板渲染而不是必须首先在 View 中加载数据(除非有什么东西我缺少 Web 开发,这是很有可能的)。

感谢您提供的任何建议,如果这是一个简单的问题,我深表歉意,我已经通读了 O'Reilly 关于 Flask Web 开发的书,并处理了一些更简单的项目,但我什至还不太了解这一点经过一天的谷歌搜索。

最佳答案

我找到了这个 artical .也许这对你有帮助。但是页面基本上说的是,将所有内容合并到一个文件中,所以我想没有办法按照你想要的方式来做这件事。但也许您可以从类中删除这些方法并将它们插入到第三个模块中。所以基本上:

modules_one:

from . import db

class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique=True, index=True)
posts = db.relationship("Post")

modules_two:

from . import db

class Post(db.Model):
__tablename__ = 'posts'
id = db.Column(db.Integer, primary_key=True)
content = db.Column(db.String(64))
user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)

模块三:

from .models_one import User
from .models_two import Post

def get_user_posts_with_content(self, passed_content):
return Post.query.filter(Post.user_id==self.id, Post.content==passed_content).all()

def get_user(self):
return User.query.filter(User.id == self.user_id).first()

关于python - 模型拆分为多个文件的 Flask,如何防止循环导入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65836050/

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