Django:运行syncdb后出现[relation "auth_group" does not exist]错误。

15
我开始了一个新的Django 1.8项目,但意识到错过了一些东西(已进行了初始迁移)。为了从头开始,我删除了所有应用程序中的数据库(postgreSQL)并删除了“migration”文件夹。
现在,当我执行“syncdb”时,会出现以下错误: django.db.utils.ProgrammingError: relation "auth_group" does not exist
当我执行“makemigrations”时,会出现以下内容: No changes detected
我做错了什么?

django.contrib.auth 是否在 INSTALLED_APPS 中? - fiacre
是的,还有django.contrib.admin也在其中(我不知道这是否有任何意义)。 - xpanta
谢谢!我以为这是默认值。-.- - monokrome
8个回答

31

你应该尝试创建 migrations 模块(即每个目录都有一个名为 __init__.py 的空文件夹,命名为 migrations),并针对你的应用程序运行 manage.py makemigrations 命令。


2
谢谢! 它奏效了! 在之前的 Django 版本中使用 South 我从没遇到过这个问题。South 重新创建了迁移文件夹。 - xpanta
对我也起作用了。但这是个 bug 还是即将到来的迁移应该这样工作? - KhoPhi
我认为这是因为一个文件夹没有__init__.py文件,所以在同步时出错了。如果你查看你的项目文件夹,你会发现每个文件夹中都有空白的init文件。 - jesuis
我应该把它放在哪个文件夹里? - Aminah Nuraini
1
@AminahNuraini 在你的应用程序文件夹中。如果应用程序文件夹中没有包含 'init.py' 的 'migrations' 文件夹,则 'makemigrations' 将忽略该应用程序。 - Ihor Pomaranskyy
据我所知,在使用Postgres时这是必须的(但在使用sqlite时不是!),即使您已经关闭了数据库的迁移(通过在settings.py中设置:MIGRATION_MODULES = {'default': None})。 - Todd Ditchendorf

9
问题出现在“未检测到更改”上。请使用您的应用程序名称执行以下命令。我猜你没有添加它(就像我犯的错误一样):
  1. python manage.py makemigrations myappname
  2. python manage.py migrate myappname

5

首先我尝试执行./manage.py migrate auth,但是没有成功。每次执行./manage.py命令时都会出现错误。问题出在我在模块作用域中使用了Group管理器。

如果你的代码在模块作用域中包含以下内容:

customers_group = Group.objects.get(name='customers')

将其移至在运行时调用的函数内部。

def xyz():
    ...
    customers_group = Group.objects.get(name='customers')

4
当您安装了django.contrib.admin应用程序时,会出现上述错误。请按照以下顺序运行这些命令。
**

./manage.py makemigrations 
./manage.py migrate auth
./manage.py migrate**

这对我来说完全有效。


对我没用。按照其他答案建议的添加迁移模块可解决问题。 - musicformellons

1
我曾经遇到Django2.2迁移的类似问题。以下是解决方法,以供需要的人参考。
我在主项目的urls.py中注释掉了所有应用程序的网址(如my_app.urls、your_app.urls),然后运行makemigrations,它就可以工作了。我认为这个错误是由于某些表单/视图引用了尚未创建的模型/字段所致。似乎django在进行迁移之前会遍历urls.py

0

可能是以下原因之一:

  • requirements.txt 中的一个 pip 依赖项正在使用 South

    在运行 Django 1.8 中执行迁移测试时出现此错误。通过以详细模式运行测试找到了具有问题的库。考虑将库升级到较新版本。

manage.py test -v 3

  • /migrations 文件夹中可能仍然存在旧的 South 迁移文件。这可能是因为在您尝试升级 Django 时,其他人仍在添加迁移。使用以下命令确保每个应用程序中存在预期的迁移文件。

manage.py showmigrations


0

你的其中一条路径(“将urls.py指向核心文件夹以及settings.py”)导致了这个问题,即在调用这些视图后导入django.contrib.auth并直接使用“auth”的方法和属性

  • 删除除每个应用程序的“init.py”之外的所有迁移
  • 进入项目的urls.py并注释掉所有路径
  • 运行“heroku run python manage.py makemigrations”
  • 运行“heroku run python manage.py migrate”

0
我尝试了这里的所有解决方案,但没有任何帮助。最后,我将在INSTALLED_APPS中创建的所有应用程序注释掉,然后对剩余的应用程序(如auth)调用python manage.py makemigrationspython manage.py migrate。然后,我逐个添加我的应用程序,并在每个应用程序之后再次调用python manage.py makemigrationspython manage.py migrate
这对我起作用了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接