1. ホーム
  2. python

[解決済み] ユーザー登録でエラー:そのようなテーブルがない:auth_user

2022-02-18 02:46:28

質問

Django のデフォルトの Auth を使って、登録とログインを処理しようとしています。

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

解決方法は?

更新情報

このエラーが発生するのは、おそらく UserCreationForm モデルフォームで、その中で META を含んでいます。 User (django.contrib.auth.models > User) をモデルとして使用します。

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

そして、ここでは独自のカスタム認証モデルを使用しているため、以下のテーブルに関連する User は作成されていません。ですから、ここでは独自のモデルフォームを使用する必要があります。メタクラスでは、モデルはあなたの User (books.User)モデル