django 1.9:ProgrammingError:relation“users_user”不存在 [英] django 1.9: ProgrammingError: relation "users_user" does not exist

查看:511
本文介绍了django 1.9:ProgrammingError:relation“users_user”不存在的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在进行迁移时,我遇到了一个ProgrammingError,我认为这可能与使用django-allauth与自定义用户有关。这是我做的事情



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不存在

任何想法如何解决这个问题?

解决方案

你的错误是由运行迁移的顺序引起的。由于许多应用程序依赖于现有的用户模型,您必须在其他应用程序之前运行自定义用户应用程序的初始迁移。



如果您更改现有项目中的默认用户模型,丢弃所有现有迁移(和数据库)并从头重建可能会更容易。应用迁移的顺序是:


  1. 核心 django.contrib 应用程序。

  2. 您的自定义用户应用。

  3. 其他自定义应用和第三方应用。

您可以使用 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:

  1. The core django.contrib apps.
  2. Your custom user app.
  3. 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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆