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

时间:2015-03-22 12:49:39

标签: python django database migrate

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

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

所有这些都与Django 1.7.x完美配合,我在其他地方找不到任何关于此问题的内容。那么,对于RC1版本它是一个大的还是做了一些我在Django 1.8中没有意识到的变化?不幸的是,错误消息并没有真正帮助......但我非常确定它与新的Django版本附带的自动迁移有关。

4 个答案:

答案 0 :(得分:15)

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

python manage.py makemigrations appname

这会在app目录中创建一个迁移文件 - etvoilà,migrate确实可以工作并创建其他表。

答案 1 :(得分:7)

我正在使用:

./manage.py makemigrations

然后

./manage.py migrate auth

然后

./manage.py migrate

答案 2 :(得分:0)

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

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

即使python manage.py showmigrations也没有工作,他们两人都提出了同样的错误。

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

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

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

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

答案 3 :(得分:0)

我在Django 1.8上遇到了几乎相同的问题,仅通过为自定义用户模型的应用运行manage.py makemigrations app_name解决了这个问题( +在下面阅读

e.g:

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


class User(AbstractUser):
    pass

和每个应用包含ForeignKeyOneToOneField等引用它的应用,例如:

# 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等...