Django:由于表单中的对象引用而无法迁移

时间:2017-06-03 16:59:36

标签: python django forms object migration

由于表单中的get_or_create()函数,我无法在新数据库上运行django迁移。

form.py

class EmployeeForm(...):
    # Make sure that we have a directory before initializing the form
    default_upload_directory = Directory.objects.get_or_create(name='Employee', parent=None)[0]

这是我写的自定义表单的重要部分。它会将Employee的上传文件链接到默认目录。除了迁移之外,一切正常。当我在新数据库上运行它时,它会抱怨django.db.utils.OperationalError: no such table: filemanager_directory。如果我使用标准objects.get(..)来访问Directory对象,也会发生这种情况。

我不知道如何解决这个问题。显然,该表尚不存在。在已有表的现有数据库中,一切正常。

编辑:我尝试运行的迁移与此应用无关。此外,作为一种变通方法,您可以注释掉该行,运行迁移并重新激活它......但这不是一个简洁的解决方案......

1 个答案:

答案 0 :(得分:1)

这很简单,不是你应该做的事情。您不应该在导入时运行的任何代码中运行任何类型的数据库访问,这样做。

在任何情况下都不应该这样做。如果您的目标是在实例化表单时确保对象存在,请将其放在__init__方法中。

但是,您还应该反映确保数据库对象存在是首先进行迁移的工作。使用RunPython方法编写数据迁移来执行此操作。