【问题标题】:makemigrations not identifying database changesmakemigrations 未识别数据库更改
【发布时间】:2015-12-22 07:56:44
【问题描述】:

我正在使用django,现在我将python文件从custom_fields重命名为fields并更改了模型类,模型类使用来自fields文件的字段,但是当我运行时

python manage.py makemigrations

存在这样的错误:

Traceback (most recent call last):
File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
File "/Users/smy/wuque/projects/LinuxChat/Server/lib/python2.7/site-packages/django/core/management/__init__.py", line 350, in execute_from_command_line
    utility.execute()
File "/Users/smy/wuque/projects/LinuxChat/Server/lib/python2.7/site-packages/django/core/management/__init__.py", line 342, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Users/smy/wuque/projects/LinuxChat/Server/lib/python2.7/site-packages/django/core/management/base.py", line 348, in run_from_argv
    self.execute(*args, **cmd_options)
File "/Users/smy/wuque/projects/LinuxChat/Server/lib/python2.7/site-packages/django/core/management/base.py", line 399, in execute
    output = self.handle(*args, **options)
File "/Users/smy/wuque/projects/LinuxChat/Server/lib/python2.7/site-packages/django/core/management/commands/makemigrations.py", line 65, in handle
    loader = MigrationLoader(None, ignore_no_migrations=True)
File "/Users/smy/wuque/projects/LinuxChat/Server/lib/python2.7/site-packages/django/db/migrations/loader.py", line 49, in __init__
    self.build_graph()
File "/Users/smy/wuque/projects/LinuxChat/Server/lib/python2.7/site-packages/django/db/migrations/loader.py", line 170, in build_graph
    self.load_disk()
File "/Users/smy/wuque/projects/LinuxChat/Server/lib/python2.7/site-packages/django/db/migrations/loader.py", line 105, in load_disk
    migration_module = import_module("%s.%s" % (module_name, migration_name))
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
File "/Users/smy/wuque/projects/LinuxChat/Server/LinuxChatServer/Server/migrations/0005_auto_20151215_1223.py", line 5, in <module>
    import Server.custom_fields
ImportError: No module named custom_fields

我不知道如何解决这个错误,所以我尝试删除migrates文件夹,但是当我再次运行上述命令时,无法检测到任何更改,即使我再次修改模型类。只需显示:

No changes detected.

现在无法修改数据库表,谁能告诉我如何解决这个问题?谢谢!

【问题讨论】:

  • python 文件是否只是一个包含您的自定义字段的文件?这不会对数据库本身产生任何影响
  • 我会先尝试将名称字段更改为另一个名称,例如 fields0。有时在 python 中,您可能会使用受其他功能保护的名称。我要尝试的第二件事是删除数据库并重新开始:python manage.py syncdb 然后 makemigrations 和 migrate...
  • @Sayse,但 Model 类正在使用来自 custom_fileds 的字段,现在称为 fields

标签: python django django-models django-migrations


【解决方案1】:

makemigrations 用于应用将直接影响数据库底层结构的更改。

重命名你的python文件不会对数据库产生任何影响,因为字段的type没有改变,因此它不会对数据库产生任何影响。您最终看到的只是您的 python 文件中的不同导入。

【讨论】:

  • 我的问题已更新。重命名的文件包含一个自定义字段类,用于一个模型类。
  • @FireSun - 没错,但是您所做的只是重命名了需要导入的内容,实际的 字段 根本没有改变
  • @FireSun - 更新 0005_auto_20151215_1223.py 以使用正确的导入(以及其他任何地方)
  • @FireSun - 那么问题应该解决了吗?.. 你可能需要用makemigrations 重新制作它们,或者你需要再次检索它们并重复我之前的评论
  • 不,完成后,任何更改都无法检测到,所以我无法修改数据库表,这是我当前的问题。
【解决方案2】:

如果这是您第一次迁移您必须使用的应用程序:

manage.py makemigrations myappname

一旦你这样做了,你就可以做到:

manage.py migrate

在项目文件夹中运行 makemigrations 意味着它将更新与项目的 settings.py 中包含的所有应用程序相关的所有表。包含它后,makemigrations 将自动包含该应用程序(这样可以节省大量工作,因此您不必为项目/站点中的每个应用程序运行 makemigrations app_name)。

如果您混淆了这些步骤中的任何一个,请阅读迁移文件。更改它们以更正您的架构或删除不需要的文件,但不要忘记更改下一个迁移文件的依赖项部分。

【讨论】:

  • 可能这些迁移文件已被删除,现在可以检测到任何模型更改,所以我运行上面的命令,它提示我:no changes detected,这是我当前的问题:我无法修改数据库表作为我的Model 类描述。
  • 我认为您的 makemigrations 文件已损坏或无法读取。所以我建议你删除数据库和 makemigrations 文件期望 init 文件。并创建新数据库并进行迁移。
  • 是的,这可以工作,我已经尝试过并且效果很好,但我不知道为什么会导致我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-09
  • 2021-05-09
  • 2014-09-14
  • 2019-11-01
  • 2021-02-07
相关资源
最近更新 更多