【问题标题】:django-sorcery isn't autogenerating migrationsdjango-sorcery 不会自动生成迁移
【发布时间】:2019-06-17 12:37:25
【问题描述】:

我正在使用 django-sorcery 库,并且一直在尝试生成一些迁移:

django-admin sorcery revision -m "Second revision" --autogenerate -v 1 my_app

当我第一次运行命令时,我看到一条错误消息:

FileNotFoundError: [Errno 2] No such file or directory: [... snip ...]python3.7/site-packages/django_sorcery/db/alembic/script.py.mako

不知道为什么 pip 包中缺少模板,我手动添加了它。

现在,该命令只生成空的迁移文件,即使我指定了 --autogenerate 标志。

我应该在某处扔一个 env.py 文件吗?这个命令实际上应该工作吗?帮助表示赞赏。

【问题讨论】:

    标签: python django sqlalchemy django-sorcery


    【解决方案1】:

    缺失的模板实际上已在最近的版本中得到解决,因此建议尝试一下。

    至于没有选择的模型,一些可能有用的想法

    • 模型需要是一个魔法模型。换句话说,它需要继承db.Model
    from django_sorcery.db import databases
    db = databases.get("default")
    class MyModel(db.Model):
        ...
    
    • 模型需要在INSTALLED_APPS 之一中定义。内部巫术使用get_containing_app_config 为模型获取相应的 django 应用程序,因为 sqlalchemy 模型未在 django 应用程序中本地注册

    • 默认情况下不需要其他任何东西,因此不需要传统的env.py。应用程序中允许进行一些基本的自定义AppConfig:

      • version_table - 默认为 alembic_version_{app.label}
      • version_table_schema

      如果不够,还有几个 signals 可用于挂钩到 alembic 配置创建以进行自定义

    这应该使迁移命令起作用。 repo 附带一个test_site,其中包含一个用于测试的规范polls 应用程序。您可以尝试使用它和 alembic 迁移:

    $ cd test_site
    $ ./manage.py sorcery revision -m 'initial migration' -r 0001 --autogenerate polls
    $ cat polls/migrations/0001_initial_migration.py
    ...
    def upgrade():
        # ### commands auto generated by Alembic - please adjust! ###
        op.create_table('question',
        sa.Column('pk', sa.Integer(), autoincrement=True, nullable=False),
        sa.Column('question_text', sa.String(length=200), nullable=True),
        sa.Column('pub_date', sa.DateTime(), nullable=True),
        sa.PrimaryKeyConstraint('pk')
        )
        op.create_table('choice',
        sa.Column('pk', sa.Integer(), autoincrement=True, nullable=False),
        sa.Column('choice_text', sa.String(length=200), nullable=True),
        sa.Column('votes', sa.Integer(), nullable=True),
        sa.Column('question_pk', sa.Integer(), nullable=True),
        sa.ForeignKeyConstraint(['question_pk'], ['question.pk'], ),
        sa.PrimaryKeyConstraint('pk')
        )
        # ### end Alembic commands ###
    ...
    

    免责声明:我是 django-sorcery 的维护者之一。感谢您的尝试!如果您遇到任何错误,请随时打开问题。由于我们正在构建功能,所以很多东西还没有很好地记录在案,但希望随着时间的推移文档和稳定性会得到改善。

    【讨论】:

    • 谢谢!我想我的 INSTALLED_APPS 中有错字,我会看看是否有帮助。
    • 有没有一种简单的方法可以将 django-sorcery 模型插入 django admin?所以我可以编辑表格等...
    • 暂时没有。我开始了一些管理员支持工作,但还处于早期阶段。最终希望让它运行github.com/shosca/django-sorcery/pull/109
    猜你喜欢
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    • 2016-06-29
    • 2012-06-26
    • 2018-12-27
    • 2021-02-08
    • 2020-11-05
    相关资源
    最近更新 更多