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 等...
我在各种项目中为我的用户模型使用 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 等...