首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python SQLModel中的SQLModel混合(基类)

python SQLModel中的SQLModel混合(基类)
EN

Stack Overflow用户
提问于 2022-04-03 13:11:02
回答 1查看 475关注 0票数 0

我正在使用SQLModel,并且希望用created_at字段定义基类,以便在其他模型中继承它。

代码语言:javascript
复制
class CreatedAtMixin(SQLModel):
    created_at: datetime = Field(default=datetime.now(timezone.utc), nullable=False)

但是当我试图在其他模型中使用它时,像这样通过alembic进行迁移

代码语言:javascript
复制
class NetworkBase(SQLModel, CreatedAtMixin):
    name: str = Field(max_length=64, description='Name of network')
    short_name: str = Field(max_length=32, description='Short name of the network')

我面临一个问题:

代码语言:javascript
复制
Traceback (most recent call last):
  File "/Users/nikitasamaev/PycharmProjects/new-checkout-backend/venv/bin/alembic", line 8, in <module>
    sys.exit(main())
  File "/Users/nikitasamaev/PycharmProjects/new-checkout-backend/venv/lib/python3.9/site-packages/alembic/config.py", line 588, in main
    CommandLine(prog=prog).main(argv=argv)
  File "/Users/nikitasamaev/PycharmProjects/new-checkout-backend/venv/lib/python3.9/site-packages/alembic/config.py", line 582, in main
    self.run_cmd(cfg, options)
  File "/Users/nikitasamaev/PycharmProjects/new-checkout-backend/venv/lib/python3.9/site-packages/alembic/config.py", line 559, in run_cmd
    fn(
  File "/Users/nikitasamaev/PycharmProjects/new-checkout-backend/venv/lib/python3.9/site-packages/alembic/command.py", line 227, in revision
    script_directory.run_env()
  File "/Users/nikitasamaev/PycharmProjects/new-checkout-backend/venv/lib/python3.9/site-packages/alembic/script/base.py", line 563, in run_env
    util.load_python_file(self.dir, "env.py")
  File "/Users/nikitasamaev/PycharmProjects/new-checkout-backend/venv/lib/python3.9/site-packages/alembic/util/pyfiles.py", line 92, in load_python_file
    module = load_module_py(module_id, path)
  File "/Users/nikitasamaev/PycharmProjects/new-checkout-backend/venv/lib/python3.9/site-packages/alembic/util/pyfiles.py", line 108, in load_module_py
    spec.loader.exec_module(module)  # type: ignore
  File "<frozen importlib._bootstrap_external>", line 850, in exec_module
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "app/db/migrations/env.py", line 12, in <module>
    from app.models import *
  File "/Users/nikitasamaev/PycharmProjects/new-checkout-backend/app/models/__init__.py", line 1, in <module>
    from app.models.blockchain import Network
  File "/Users/nikitasamaev/PycharmProjects/new-checkout-backend/app/models/blockchain.py", line 9, in <module>
    class NetworkBase(SQLModel, CreatedAtMixin):
  File "/Users/nikitasamaev/PycharmProjects/new-checkout-backend/venv/lib/python3.9/site-packages/sqlmodel/main.py", line 277, in __new__
    new_cls = super().__new__(cls, name, bases, dict_used, **config_kwargs)
  File "pydantic/main.py", line 149, in pydantic.main.ModelMetaclass.__new__
  File "pydantic/config.py", line 118, in pydantic.config.inherit_config
TypeError: Cannot create a consistent method resolution
order (MRO) for bases Config, Config

当然,我可以在我的NetworkBase和其他模型中手动设置字段NetworkBase,它可以在没有任何问题的情况下工作,但是我想继承CreatedAtMixin

解决这个问题的方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2022-06-20 16:39:44

您需要取出SQLModel继承,因为它已经是第一个类中的SQLModel类:

代码语言:javascript
复制
class CreatedAtMixin(SQLModel):
    created_at: datetime = Field(default=datetime.now(timezone.utc), nullable=False)

class NetworkBase(CreatedAtMixin):
    name: str = Field(max_length=64, description='Name of network')
    short_name: str = Field(max_length=32, description='Short name of the network')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71726238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档