【问题标题】:How to solve filer and sites dependencies problem in my project如何解决我的项目中的文件管理器和站点依赖问题
【发布时间】:2020-04-15 08:51:57
【问题描述】:

目前我已经开始从事我为学习目的而提供的 Django 项目。

我已经在我的 virtualenv 中完成了所有必要的设置,并且在我的项目上运行迁移命令时,我遇到了如下依赖问题。

我试图在网上和 django doc 中找到解决方案,但一无所知。

追溯


Traceback (most recent call last):
  File "manage.py", line 40, in <module>
    execute_from_command_line(sys.argv)
  File "/home/moon/production/remax/remax_env/lib/python3.6/site-packages/django/core/management/__init__.py", line 353, in execute_from_command_line
    utility.execute()
  File "/home/moon/production/remax/remax_env/lib/python3.6/site-packages/django/core/management/__init__.py", line 345, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/moon/production/remax/remax_env/lib/python3.6/site-packages/django/core/management/base.py", line 348, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/home/moon/production/remax/remax_env/lib/python3.6/site-packages/django/core/management/base.py", line 399, in execute
    output = self.handle(*args, **options)
  File "/home/moon/production/remax/remax_env/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 89, in handle
    executor = MigrationExecutor(connection, self.migration_progress_callback)
  File "/home/moon/production/remax/remax_env/lib/python3.6/site-packages/django/db/migrations/executor.py", line 20, in __init__
    self.loader = MigrationLoader(self.connection)
  File "/home/moon/production/remax/remax_env/lib/python3.6/site-packages/django/db/migrations/loader.py", line 49, in __init__
    self.build_graph()
  File "/home/moon/production/remax/remax_env/lib/python3.6/site-packages/django/db/migrations/loader.py", line 306, in build_graph
    _reraise_missing_dependency(migration, parent, e)
  File "/home/moon/production/remax/remax_env/lib/python3.6/site-packages/django/db/migrations/loader.py", line 276, in _reraise_missing_dependency
    raise exc
  File "/home/moon/production/remax/remax_env/lib/python3.6/site-packages/django/db/migrations/loader.py", line 302, in build_graph
    self.graph.add_dependency(migration, key, parent)
  File "/home/moon/production/remax/remax_env/lib/python3.6/site-packages/django/db/migrations/graph.py", line 126, in add_dependency
    parent
django.db.migrations.exceptions.NodeNotFoundError: Migration core.0002_auto_20200408_0215 dependencies reference nonexistent parent node ('filer', '0008_auto_20200408_0215')

来自迁移文件的片段如下。 0002_auto_20200408_0215.py

class Migration(migrations.Migration):

    dependencies = [
        ('filer', '0008_auto_20200408_0215'),
        ('sites', '0003_auto_20200408_0215'),
        ('core', '0001_initial'),
    ]

我曾想过从 0002_auto_20200408_0215.py 文件中注释依赖行,但我的朋友告诉我它应该可以在不删除任何行的情况下工作。

有人可以指导我做错了什么以及如何解决这个问题。

谢谢。

【问题讨论】:

    标签: python django django-sites django-filer


    【解决方案1】:

    似乎没有提到名称 0008_auto_20200408_0215 的 django-filer 迁移。

    https://github.com/divio/django-filer/tree/master/filer/migrations

    鉴于后缀 _20200408_0215 与您自己的应用程序的迁移文件相同 -- 您的迁移文件是否被编辑过?

    当您依赖外部包的迁移时,您的应用程序将使用包附带的那些。在正常的工作流程中,您不应为其他应用程序生成迁移文件。

    TLDR;解决方案

    在您安装的 'django-filer' 应用程序中找到可用的最新迁移并编辑您的迁移文件以使用它。

    示例

    ls /usr/local/lib/python3.7/site-packages/filer/migrations/
    0001_initial.py             0004_auto_20160328_1434.py  0007_auto_20161016_1055.py  0010_auto_20180414_2058.py  __pycache__
    0002_auto_20150606_2003.py  0005_auto_20160623_1425.py  0008_auto_20171117_1313.py  0011_auto_20190418_0137.py
    0003_thumbnailoption.py     0006_auto_20160623_1627.py  0009_auto_20171220_1635.py  __init__.py
    

    您必须检查 python3.6 而不是 python3.7,并且您可能需要检查 dist-packages 以及 site-packages,具体取决于您的发行版和安装 django-filer 的方式。

    我的测试应用程序有一个这样的models.py:

    from django.db import models
    from filer.fields.file import FilerFileField
    
    # Create your models here.
    class Myobject(models.Model):
        name = models.CharField(max_length=100)
        other_name = models.CharField(max_length=100)
        file_field = FilerFileField(blank=True, null=True, on_delete=models.SET_NULL)
    

    在迁移文件中生成依赖项,如下所示:

    # Generated by Django 3.0.5 on 2020-04-15 10:21
    
    from django.db import migrations
    import django.db.models.deletion
    import filer.fields.file
    
    
    class Migration(migrations.Migration):
    
        dependencies = [
            ('filer', '0011_auto_20190418_0137'),
            ('testthis', '0001_initial'),
        ]
    <snip>
    

    如果我完全更改该依赖项 ('filer', '0011_auto_20190418_0137'),,我会遇到同样的错误。

    raise NodeNotFoundError(self.error_message, self.key, origin=self.origin)
    django.db.migrations.exceptions.NodeNotFoundError: Migration testthis.0002_myobject_file_field dependencies reference nonexistent parent node ('filer', '0011_auto')
    

    将您的迁移文件与系统上可用的最新 django-filer 迁移对齐。

    【讨论】:

      【解决方案2】:

      在迁移之前,输入python manage.py showmigrations,您将看到所有应用及其迁移(应用或未应用)。 检查是否确实有一个名为“0008_auto_20200408_0215”的迁移的“文件管理器”应用程序。如果没有,应用程序可能不在您的 INSTALLED_APPS (project/settings.py) 中,您应该添加它,或者从依赖项列表中删除依赖项(尽管我不推荐这样做)

      【讨论】:

      • 我已经尝试使用showmigrations,但我仍然遇到同样的错误。
      • 请用python manage.py showmigrations 发布一个sn-p,这样我就可以准确地告诉你问题出在哪里。
      猜你喜欢
      • 2021-07-23
      • 1970-01-01
      • 2011-11-07
      • 2020-09-30
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      相关资源
      最近更新 更多