web-dev-qa-db-ja.com

django:エラーのあるユーザー登録:no such table:auth_user

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

誰かが私がすべきことを説明して教えてもらえますか?

29
user2988464

更新

おそらくUserCreationForm modelformを使用しているため、このエラーが発生します。このモデルでは、METAUser(Django.contrib.auth.models> User)がモデルとして含まれています。

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

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

16
ruddra
./manage.py migrate

すべてのミドルウェアなどを有効にした場合、各移行が実行され、不足しているテーブルが追加されます。

55
jmoz

あなたがする必要があるのは以下だけです:

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.
20
Rajiv Sharma

これはDjangoバージョン<1.7:

コマンドでテーブルを初期化する

manage.py syncdb

これにより、テーブルを初期化するだけでなく、「スーパーユーザー」を指名することができます。

12
holdenweb

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',
        )
3
Kukosk

python manage.py makemigrations→→python manage.py migrate修正。

Settings.pyで定義/インストールされたアプリがプロジェクトディレクトリに存在すると仮定します。
1
Jason Muriki

次のフローを実行するだけです

$ 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

次に、ユーザー名とパスワードを要求します

Djangoウェブサイトを仮想環境にデプロイしようとしたときに、「no such table: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',
    }
}  

問題が解決することを願っています。

1
Rahul Kant

いくつのpython windows go ---> task managerのようにバックグラウンドでインスタンスが実行されているかを確認し、pythonインスタンスを確認して、タスクをすべて終了または終了します。 pythonインスタンス。「py manage.py runserver」コマンドを使用して再実行します。正常に動作することを願っています。..

1
Vardhman Danole

これらのコマンドを呼び出す

python manage.py makemigrations
python manage.py migrate
0
thenish

On Django 1.11 docsの指示に従ってこれを行わなければなりませんでした 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
0
igo

プロジェクト/アプリで変更を行った場合は、次を実行します。

python manage.py migrate
python manage.py makemigrations
python manage.py createsuperuser
0
Suraj Verma

カスタムユーザーモデルを作成する前に、最初の移行を実行する必要があります。次に、ユーザーモデルのアプリケーションをインストールし、AUTH_USER_MODELを追加します。

同様に:

class UserForm(UserCreationForm):

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

そして

python manage.py migrate auth
python manage.py migrate
0
calosh