用户注册错误:没有这样的表:auth_user

Posted

技术标签:

【中文标题】用户注册错误:没有这样的表:auth_user【英文标题】:User Registration with error: no such table: auth_user 【发布时间】:2014-09-01 03:49:58 【问题描述】:

我正在尝试使用 Django 的默认身份验证来处理注册和登录。

setting.py:

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'books',
)

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

AUTH_USER_MODEL = 'books.User'

books.models.py:

class User(AbstractUser):
    account_balance = models.DecimalField(max_digits=5, decimal_places=2, default=0)

views.py:

from django.contrib.auth.forms import UserCreationForm

def register(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            new_user = form.save()
            return HttpResponseRedirect("/accounts/profile/")
    else:
        form = UserCreationForm()
    return render(request, "registration/register.html", 'form': form,)

urls.py:

urlpatterns = patterns('',
    (r'^accounts/login/$', login),
    (r'^accounts/logout/$', logout),
    (r'^accounts/profile/$', profile),
    (r'^accounts/register/$', register),
)

我尝试删除 db.sqlite3 文件并重新运行 python manage.py syncdb,但仍然收到此错误消息:

OperationalError at /accounts/register/
no such table: auth_user
Request Method: POST
Request URL:    http://127.0.0.1:8000/accounts/register/
Django Version: 1.7b4
Exception Type: OperationalError
Exception Value:    
no such table: auth_user

【问题讨论】:

在syncdb期间有没有报错? 不,它运行良好:要执行的操作:同步未迁移的应用程序:admin、contenttypes、books、auth、sessions 应用所有迁移:(无)同步没有迁移的应用程序:创建表...安装自定义SQL...安装索引...运行迁移:不需要迁移。 【参考方案1】:
./manage.py migrate

如果您刚刚启用了所有中间件等,这将运行每个迁移并添加缺少的表。

【讨论】:

这是对遇到此问题的任何人都应该有效的答案,我正要在此线程中写一篇文章,但已在此处得到解答。我还运行了 py manage.py makemigrations 然后 py manage.py migrate 并且一切都已修复,但我怀疑 manage.py makemigrations 是否需要 【参考方案2】:

你唯一需要做的就是:

python manage.py migrate

然后:

python manage.py createsuperuser

之后您可以选择用户名和密码。

这里是示例输出:

Username (leave blank to use 'hp'): admin
Email address: xyz@gmail.com
Password:
Password (again):
Superuser created successfully.

【讨论】:

这个答案对我有用,但是第一次安装如何在 docker 中运行它【参考方案3】:

更新

您可能会收到此错误,因为您使用的是UserCreationForm modelform,其中META 包含User(django.contrib.auth.models > User) 作为模型。

class Meta:
    model = User
    fields = ("username",)

在这里您使用的是您自己的自定义身份验证模型,因此尚未创建与 User 相关的表。所以在这里你必须使用你自己的自定义模型。在 Meta 类中,模型应该是您的 User(books.User) 模型

【讨论】:

我已经更新了我的答案,请检查它是否解决了您的问题。 @user2988464 想问一个初级问题,如何查看UserCreationForm的源文件? 这里:github.com/django/django/blob/master/django/contrib/auth/…@user2988464【参考方案4】:

这适用于 django 版本

使用命令初始化表

manage.py syncdb

这允许您提名“超级用户”以及初始化任何表。

【讨论】:

【参考方案5】:

在创建超级用户之前需要进行迁移。

python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
Username : admin
Password : 12345678

python manage.py runserver

【讨论】:

【参考方案6】:

在您为以下应用应用迁移之前,您的项目可能无法正常运行:admin、auth、contenttypes、sessions。 尝试运行

python manage.py migrate

然后运行

python manage.py createsuperuser

【讨论】:

【参考方案7】:

如果使用自定义身份验证模型,在您的 UserCreationForm 子类中,您必须同时覆盖元类和 clean_username 方法,因为它引用了硬编码的 User 类(后者直到 django 1.8)。

class Meta(UserCreationForm.Meta):
        model = get_user_model()

    def clean_username(self):
        username = self.cleaned_data['username']

        try:
            self.Meta.model.objects.get(username=username)
        except self.Meta.model.DoesNotExist:
            return username

        raise forms.ValidationError(
            self.error_messages['duplicate_username'],
            code='duplicate_username',
        )

【讨论】:

我试过这个,我得到'''IndentationError: unindent does not match any external indentation level'''【参考方案8】:

在创建自定义用户模型之前,必须执行第一次迁移。然后安装您的用户模型的应用程序并添加 AUTH_USER_MODEL。

还有:

class UserForm(UserCreationForm):

    class Meta:
        model = User
        fields = ("username",)

python manage.py migrate auth
python manage.py migrate

【讨论】:

【参考方案9】:

在 Django 1.11 上,我必须按照文档 https://docs.djangoproject.com/en/1.11/topics/auth/customizing/#substituting-a-custom-user-model 中的说明执行此操作

# create default database:
./manage.py migrate

# create my custom model migration:
# running `./manage.py makemigrations` was not enough
./manage.py makemigrations books
# specify one-off defaults

# create table with users:
./manage.py migrate

【讨论】:

【参考方案10】:

只需执行以下流程

$ django-admin createproject <your project name>

&lt;your project dict&gt; 下输入django-admin createapp &lt;app name&gt;

&lt;app name&gt;/admin.py

from django.contrib import admin
from .models import Post
admin.site.register(Post)

转到根项目。然后$python manage.py migrate

然后它会询问用户名和密码

【讨论】:

【参考方案11】:

只需在注册用户之前执行迁移。

【讨论】:

欢迎来到 SO!当你要回答一个已经有公认答案的老问题(这个问题超过 6 岁)时(这里就是这种情况),请问问自己:我真的有实质性的改进吗?如果没有,请考虑不要回答。【参考方案12】:

将自定义用户模型添加到 django 有四个步骤

    创建一个 CustomUser 模型 更新项目/settings.py AUTH_USER_MODEL 自定义 UserCreationForm 和 UserChangeForm 将自定义用户模型添加到 admin.py

您错过了自定义表单,将 CustomUser 和 CustomUserAdmin 添加到 admin.site.register() ,然后进行迁移和迁移。

#proj_app/forms.py
from django.contrib.auth import get_user_model
from django.contrib.auth.forms import UserCreationForm, UserChangeForm

class CustomUserCreationForm(UserCreationForm):
    class Meta:
            model = get_user_model()
            fields = ('email','username',)

class CustomUserChangeForm(UserChangeForm):
    class Meta:
            model = get_user_model()
            fields = ('email',  'username',)

#proj_app/admin.py
from django.contrib import admin
from django.contrib.auth import get_user_model
from django.contrib.auth.admin import UserAdmin

from .forms import CustomUserCreationForm , CustomUserChangeForm

CustomUser = get_user_model()

class CustomUserAdmin(UserAdmin):
    add_form = CustomUserCreationForm
    form = CustomUserChangeForm
    model = CustomUser
    list_display = ['email','username',]

admin.site.register(CustomUser, CustomUserAdmin)

在这里,我们将现有的 UserAdmin 扩展为 CustomUserAdmin,并告诉 django 使用我们的新表单、自定义用户模型,并仅列出用户的电子邮件和用户名,我们还可以将更多现有的用户字段添加到 list_display

【讨论】:

【参考方案13】:

当我尝试在虚拟环境中部署我的 Django 网站之一时,我也遇到了同样的问题“没有这样的表:auth_user”。

这是我的解决方案,适用于我的情况:

在您定义数据库设置的 settings.py 文件中,如下所示:

DATABASES = 
    'default': 
        'ENGINE': 'django.db.backends.sqlite3',

        'NAME': os.path.join(os.getcwd(), 'db.sqlite3'),
     
   

只需找到您的 db.sqlite3 数据库或您正在使用的任何其他数据库并写下您的数据库的完整路径,因此数据库设置现在看起来像这样;

DATABASES = 
    'default': 
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': '/home/django/django_project/db.sqlite3',
    
  

我希望您的问题现在可以解决。

【讨论】:

【参考方案14】:

python manage.py makemigrations 然后 → python manage.py migrate 修复它。

假设在 settings.py 中定义/安装的应用程序存在于项目目录中。

【讨论】:

【参考方案15】:

请检查有多少 python 实例在后台运行,就像在 windows go--->任务管理器中并检查 python 实例并终止或结束任务,即终止所有 python 实例。使用“py manage.py runserver”命令再次运行。 我希望它会正常工作....

【讨论】:

【参考方案16】:

如果您在项目/应用程序中进行了任何更改,则执行:

python manage.py migrate
python manage.py makemigrations
python manage.py createsuperuser

【讨论】:

【参考方案17】:

调用这些命令

python manage.py makemigrations
python manage.py migrate

【讨论】:

以上是关于用户注册错误:没有这样的表:auth_user的主要内容,如果未能解决你的问题,请参考以下文章

没有这样的表:main.auth_user__old

Graphite Web 错误日志,OperationalError:没有这样的表:auth_user

/admin/login/ 的 OperationalError 没有这样的表:auth_user

如何修复 - 没有这样的表:main.auth_user__old

Heroku中的Django部署:createsuperuser失败:django.db.utils.OperationalError:没有这样的表:auth_user

Django 在单独的数据库上进行测试,给出“OperationalError:没有这样的表:auth_user”