gpt4 book ai didi

django - Django 1.7-makemigrations为非托管模型创建迁移

转载 作者:行者123 更新时间:2023-12-03 11:43:27 25 4
gpt4 key购买 nike

我在应用程序中创建了一些动态Django模型,除迁移系统外,其他一切似乎都按预期工作。

如果我创建动态Django模型并设置managed = False,则Django的makemigrations命令仍会为该新模型生成迁移。迁移看起来像这样:

class Migration(migrations.Migration):

dependencies = [
('atom', '0001_initial'),
]

operations = [
migrations.CreateModel(
name='books',
fields=[
],
options={
'db_table': 'books',
'managed': False,
},
bases=(models.Model,),
),
]

如果不创建迁移,则在运行 python manage.py migrate时,会看到以下消息(红色吓人的大字母):
Your models have changes that are not yet reflected in a migration, and so won't be applied.
Run 'manage.py makemigrations' to make new migrations, and then re-run 'manage.py migrate' to apply them.

是否可以告诉Django 1.7中的迁移系统一起忽略非托管模型?还是模型的Meta类中的migrations = False设置?

更新:为澄清起见,我使用一种方法来创建我的动态模型,该模型类似于在以下地方描述的模型:
  • http://dynamic-models.readthedocs.org/en/latest/topics/model.html#topics-model
  • https://code.djangoproject.com/wiki/DynamicModels

  • 此方法非常适合根据存储在我的配置模型( https://code.djangoproject.com/wiki/DynamicModels#Adatabase-drivenapproach)中的信息生成动态模型。我确实必须注册一个信号来清除django模型缓存,以便在更改Configuration实例时捕获对模型的更改,但是除了为这些模型生成了迁移这一事实以外,其他一切似乎都运行良好。如果我删除其中一种配置,并且从Django的缓存中删除了模型,则需要再次更新迁移,从而删除不需要的模型。

    这些动态模型没有在应用程序中专门使用。我没有在代码中引用书本模型(在上面的示例中)。它们在运行时生成,用于从它们提供访问权限的旧表中读取信息。

    最佳答案

    简短的答案是Django不是为此而构建的。使模型“不受管理” only means Django will not create or delete the table for it -- nothing else

    也就是说,如果在同一应用程序中没有常规模型以及这些动态模型,则可以有条件地将应用程序添加到INSTALLED_APPS中的settings.py中:

    if not ('makemigrations' in sys.argv or 'migrate' in sys.argv):
    INSTALLED_APPS += (
    'app_with_dynamic_models',
    'another_app_with_dynamic_models',
    )

    这应该使Django在创建和运行迁移时忽略该应用程序。但是,如果要使用模型,则必须从 the ability to have apps which do not use migrations is meant to go away in Django 1.9开始最终进行并运行模型的迁移。您的动态模型可以重构为使用 contenttypes framework吗?

    关于django - Django 1.7-makemigrations为非托管模型创建迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26615297/

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