django 1.9:ProgrammingError:relation“users_user”不存在 [英] django 1.9: ProgrammingError: relation "users_user" does not exist
问题描述
1 /使用psql创建一个新的数据库:
create database dj_example;
2 / Installed_apps包含django.contrib.sites:
DJANGO_APPS =(
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions ',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin'
)
THIRD_PARTY_APPS =(
'crispy_forms',#表单布局
'allauth',#注册
'allauth.account',#注册
# 'allauth.socialaccount',#registration
#'allauth.socialaccount.providers.twitter',
'djcelery',#Celery
)
LOCAL_APPS =(
' tucat.users',#custom users app
}
3 / site_id设置为1
SITE_ID = 1
4 /自定义用户模型过于简单:
# - * - 编码:utf-8 - * -
从__future__导入unicode_liter als,absolute_import
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
def __unicode __(self):
return self.username
5 / Makemigrations工作正常
#python manage.py makemigrations
'djcelery'的迁移:
0028_auto_20160601_1919.py:
- 更改taskmeta上的字段状态
6 /迁移返回 ProgrammingError:relationusers_user不存在
#python manage.py migrate
要执行的操作:
应用所有迁移:auth,contenttypes,djcelery,account,admin,sessions
运行迁移:
渲染模型状态... DONE
应用account.0001_initial ...追溯(最近的最后一次调用):
文件/home/antoinet/.virtualenvs/tucat/ lib / python3.4 / site-packages / django / db / backends / utils.py,第64行,执行
return self.cursor.execute(sql,pa公羊)
psycopg2.ProgrammingError:关系users_user不存在
上述异常是以下异常的直接原因:
追溯(最近的呼叫最后):
文件manage.py,第12行,在< module>
execute_from_command_line(sys.argv)
文件/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/core/management/__init__.py,第353行,在execute_from_command_line
utility.execute()
文件/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/core/management/__init__.py,第345行,执行
self.fetch_command(子命令).run_from_argv(self.argv)
文件/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/core/管理/ base.py,第348行,在run_from_argv
self.execute(* args,** cmd_options)
文件/home/antoinet/.virtualenvs/tucat/lib/python3.4/site packages / django / core / management / base.py,行399,执行
output = self.handle(* args,** options)
文件/home/antoinet/.virtualenvs/ tucat / lib / python3.4 / site-packages / django / core / management / commands / migrate.py,第200行,处理
executor.migrate(targets,plan,fake = fake,fake_initial = fake_initial)
文件/ home / antoinet /第92行,迁移
self._migrate_all_forwards(plan,full_plan,fake = fake,fake_initial = fake_initial),第v行.virtualenvs / tucat / lib / python3.4 / site-packages / django / )
文件/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/db/migrations/executor.py,第121行,_migrate_all_forwards
state = self .apply_migration(state,migration,fake = fake,fake_initial = fake_initial)
文件/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/db/migrations/executor.py ,第198行,apply_migration
state = migration.apply(state,schema_editor)
文件/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/db /backends/base/schema.py,第90行,__exit__
self.execute(sql)
文件/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages /django/db/backends/base/schema.py,第110行,执行
cursor.execute(sql,params)
文件/home/antoinet/.virtualenvs/tucat/lib/python3 0.4 /定点package / django / db / backends / utils.py,第79行,执行
return super(CursorDebugWrapper,self).execute(sql,params)
文件/home/antoinet/.virtualenvs/ tucat / lib / python3.4 / site-packages / django / db / backends / utils.py,第64行,执行
return self.cursor.execute(sql,params)
文件/ home / antoinet / .virtualenvs / tucat / lib / python3.4 / site-packages / django / db / utils.py,第95行,__exit__
six.reraise(dj_exc_type,dj_exc_value,traceback)
文件/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/utils/six.py,第685行,重新计算
raise value.with_traceback(tb)
文件/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/db/backends/utils.py,第64行,执行
return self.cursor.execute (sql,params)
django.db.utils.ProgrammingError:relationusers_user不存在
任何想法如何解决这个问题?
你的错误是由运行迁移的顺序引起的。由于许多应用程序依赖于现有的用户模型,您必须在其他应用程序之前运行自定义用户应用程序的初始迁移。
如果您更改现有项目中的默认用户模型,丢弃所有现有迁移(和数据库)并从头重建可能会更容易。应用迁移的顺序是:
- 核心
django.contrib
应用程序。 - 您的自定义用户应用。
- 其他自定义应用和第三方应用。
您可以使用 django-admin showmigrations
以查看哪些迁移存在并计划。
I am running into a ProgrammingError when doing migrate, I think it may be related to the use of django-allauth with a custom user. Here is what I do
1/ Create a fresh database with psql:
create database dj_example;
2/ Installed_apps contain django.contrib.sites:
DJANGO_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
)
THIRD_PARTY_APPS = (
'crispy_forms', # Form layouts
'allauth', # registration
'allauth.account', # registration
#'allauth.socialaccount', # registration
#'allauth.socialaccount.providers.twitter',
'djcelery', #Celery
)
LOCAL_APPS = (
'tucat.users', # custom users app
}
3/ site_id is set to 1
SITE_ID = 1
4/ Custom user model is overly simple:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals, absolute_import
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
def __unicode__(self):
return self.username
5/ Makemigrations works fine
# python manage.py makemigrations
Migrations for 'djcelery':
0028_auto_20160601_1919.py:
- Alter field status on taskmeta
6/ Migrate returns ProgrammingError: relation "users_user" does not exist
# python manage.py migrate
Operations to perform:
Apply all migrations: auth, contenttypes, djcelery, account, admin, sessions
Running migrations:
Rendering model states... DONE
Applying account.0001_initial...Traceback (most recent call last):
File "/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
psycopg2.ProgrammingError: relation "users_user" does not exist
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "manage.py", line 12, in <module>
execute_from_command_line(sys.argv)
File "/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/core/management/__init__.py", line 353, in execute_from_command_line
utility.execute()
File "/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/core/management/__init__.py", line 345, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/core/management/base.py", line 348, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/core/management/base.py", line 399, in execute
output = self.handle(*args, **options)
File "/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/core/management/commands/migrate.py", line 200, in handle
executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial)
File "/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/db/migrations/executor.py", line 92, in migrate
self._migrate_all_forwards(plan, full_plan, fake=fake, fake_initial=fake_initial)
File "/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/db/migrations/executor.py", line 121, in _migrate_all_forwards
state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
File "/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/db/migrations/executor.py", line 198, in apply_migration
state = migration.apply(state, schema_editor)
File "/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/db/backends/base/schema.py", line 90, in __exit__
self.execute(sql)
File "/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/db/backends/base/schema.py", line 110, in execute
cursor.execute(sql, params)
File "/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/db/backends/utils.py", line 79, in execute
return super(CursorDebugWrapper, self).execute(sql, params)
File "/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/db/utils.py", line 95, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/utils/six.py", line 685, in reraise
raise value.with_traceback(tb)
File "/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
django.db.utils.ProgrammingError: relation "users_user" does not exist
Any idea of how to resolve that problem?
Your error is caused by the order you run the migrations. Since many apps depend on the user model existing, you must run the initial migrations for your custom user app before those other apps.
If you change the default user model in an existing project, it might be easier to discard all existing migrations (and the database) and rebuild from scratch. The order to apply migrations would be:
- The core
django.contrib
apps. - Your custom user app.
- Other custom apps and third party apps.
You can use django-admin showmigrations
to see which migrations exists and are planned.
这篇关于django 1.9:ProgrammingError:relation“users_user”不存在的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!