Django: Регистрация пользователя с ошибкой: нет такой таблицы: auth_user

Я пытаюсь использовать Django default Auth для обработки регистра и входа в систему. И я думаю, что эта процедура довольно стандартная, но моя с ошибкой.

my 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'

my books.models.py:

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

my 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,})

my urls.py

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

Даже я попытался удалить db.sqlite3 и re 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

Может кто-нибудь объяснить и сказать мне, что я должен делать?

Ответы

Ответ 1

Update

Вероятно, вы получаете эту ошибку, потому что используете модель UserCreationForm modelform, в которой в META она содержит User (django.contrib.auth.models > Пользователь) в качестве модели.

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

И здесь вы используете свою собственную пользовательскую модель auth, поэтому таблицы, связанные с User, не были созданы. Таким образом, здесь вы должны использовать свою собственную модель модели. где в классе Meta модель должна быть вашей моделью User (books.User)

Ответ 2

./manage.py migrate

Если вы только что включили все посредники и т.д., это приведет к каждой миграции и добавит недостающие таблицы.

Ответ 3

Единственное, что вам нужно сделать, это:

python manage.py migrate

и после этого:

python manage.py createsuperuser

после этого вы можете выбрать имя пользователя и пароль.

Вот пример вывода:

Username (leave blank to use 'hp'): admin
Email address: [email protected]
Password:
Password (again):
Superuser created successfully.

Ответ 4

Это будет работать для версии django <1.7:

Инициализировать таблицы командой

manage.py syncdb

Это позволяет вам назначать "суперпользователя", а также инициализировать любые таблицы.

Ответ 5

При использовании пользовательской модели auth в вашем подклассе UserCreationForm вам придется переопределить метод metaclass и clean_username, поскольку он ссылается на жесткий код пользователя (последний только до 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',
        )

Ответ 6

Я также столкнулся с той же проблемой "нет такой таблицы: auth_user", когда я пытался развернуть один из моих сайтов Django в виртуальной среде.

Вот мое решение, которое работало в моем случае:

В файле 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',
    }
}  

Я надеюсь, что ваша проблема будет решена.

Ответ 7

python manage.py makemigrations then → python manage.py migrate исправляет его.

Предполагая, что приложения, установленные/установленные в settings.py, существуют в каталоге проекта.

Ответ 8

Пожалуйста, проверьте, сколько экземпляров python работает в фоновом режиме, например, в windows go --- > диспетчере задач и проверяет экземпляры python и убивает или завершает работу. i.e убивает все экземпляры python. снова запустите команду "py manage.py runningerver". я надеюсь, что это будет хорошо работать....

Ответ 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>

под <your project dict> тип django-admin createapp <app name>

в разделе <app name>/admin.py

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

Перейдите в корневой проект. Затем $python manage.py migrate

Затем он запрашивает имя пользователя и пароль.

Ответ 11

Если Вы сделали какие-либо изменения в проекте/приложении, выполните:

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

Ответ 12

вызвать эти команды

python manage.py makemigrations
python manage.py migrate

Ответ 13

Перед созданием пользовательской модели необходимо выполнить первую миграцию. Затем установите приложение вашей модели пользователя и добавьте AUTH_USER_MODEL.

Также:

class UserForm(UserCreationForm):

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

и

python manage.py migrate auth
python manage.py migrate

Ответ 14

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

python manage.py runserver