Django 1.8 RC1:创建数据库表时出现 ProgrammingError

Django 1.8 RC1: ProgrammingError when creating database tables

我在各种项目中为我的用户模型使用 AbstractBaseUser。更新到 Django 1.8 RC1 工作顺利,我可以 运行 迁移管理命令。但是,当尝试从头开始创建新数据库 table 布局时,出现以下错误:

python manage.py migrate
>>> ...
>>> ...
>>> django.db.utils.ProgrammingError: relation "auth_group" does not exist

一切都与 Django 1 完美配合。7.x 我在别处找不到关于此问题的任何信息。那么,它是 RC1 版本的一个大问题还是做了一些我在 Django 1.8 中不知道的更改?不幸的是,错误消息并没有真正帮助......但我很确定它与新 Django 版本附带的自动迁移有关。

复制我从上面提到的 Django 票中得到的答案:在调用 "python manage.py migrate" 创建数据库布局之前,需要为包含自定义用户 class 的应用程序创建一个迁移:

python manage.py makemigrations appname

这会在应用程序目录中创建一个迁移文件 - 瞧瞧,迁移确实有效并创建了其他表。

我正在使用:

./manage.py makemigrations

然后

./manage.py migrate auth

然后

./manage.py migrate

我遇到了一个非常相似的问题,抱怨 relation "auth_group" does not exist 但是 Django 1.10。

python manage.py makemigrations appname 对我也没有帮助。

即使 python manage.py showmigrations 也没有工作,他们都引发了同样的错误。

在详细检查回溯之后,我发现,在我的一个基于 class 的视图中,我按以下方式定义了 queryset class 变量:

Class SomeClassBasedView(ListView):
    queryset = User.objects.filter(groups=Group.objects.get(name='Tester'))

更改此设置以覆盖 get_queryset 函数后,它工作正常。

Class SomeClassBasedView(ListView):
     def get_queryset(self):
         return User.objects.filter(groups=Group.objects.get(name='Tester'))

我在 Django 1.8 中遇到了几乎相同的问题,仅通过 运行 manage.py makemigrations app_name 解决了具有自定义用户模型的应用程序(+阅读下文)

例如:

# some_app/models.py:
from django.contrib.auth.models import AbstractUser


class User(AbstractUser):
    pass

AND FOR EVERY app that contained ForeignKey, OneToOneField etc references to it, e.g.:

# another_app/models.py:
from django.conf import settings
from django.db import models


class Profile(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

然后 manage.py migrate 工作没有错误

同样的方法适用于任何包含 django.contrib 模型扩展的应用程序,例如FlatPages 等...