は、私は、カスタムユーザーとして以下のモデルを持って存在していません。正常に動作しますが、ユーザーを追加すると次のエラーが発生します。Djangoのカスタム・ユーザー・モデルは、関係「AUTH_USERは」
Exception Value:
relation "auth_user" does not exist
LINE 1: ...user"."is_active", "auth_user"."date_joined" FROM "auth_user...
は、私は、カスタムユーザーとして以下のモデルを持って存在していません。正常に動作しますが、ユーザーを追加すると次のエラーが発生します。Djangoのカスタム・ユーザー・モデルは、関係「AUTH_USERは」
Exception Value:
relation "auth_user" does not exist
LINE 1: ...user"."is_active", "auth_user"."date_joined" FROM "auth_user...
掘り出した後、私はこれを見つけました
犯人はdjango.contrib.auth.forms.py
内部UserCreationForm
内部機能clean_username
あります。いくつかのチケットが作成されましたが、どうやらメンテナは、それが欠陥だとは思わない:このファイルの
https://code.djangoproject.com/ticket/20188
https://code.djangoproject.com/ticket/20086
def clean_username(self):
# Since User.username is unique, this check is redundant,
# but it sets a nicer error message than the ORM. See #13147.
username = self.cleaned_data["username"]
try:
User._default_manager.get(username=username)
except User.DoesNotExist:
return username
raise forms.ValidationError(self.error_messages['duplicate_username'])
User
は直接組み込み、ユーザモデルに参照しています。それを修正する
、私は私のカスタムは
from models import User #you can use get_user_model
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth import forms
class MyUserCreationForm(UserCreationForm):
def clean_username(self):
# Since User.username is unique, this check is redundant,
# but it sets a nicer error message than the ORM. See #13147.
username = self.cleaned_data["username"]
try:
User._default_manager.get(username=username)
except User.DoesNotExist:
return username
raise forms.ValidationError(self.error_messages['duplicate_username'])
class Meta(UserCreationForm.Meta):
model = User
class MyUserAdmin(UserAdmin):
add_form = MyUserCreationForm
admin.site.register(User,MyUserAdmin)
を形成それとも、User
変数を置き換えるために、元のUserCreationForm
にパッチを適用猿を試すことができます作成しました。
これは、移行が実行されていないためです。この問題は、次のコマンドを実行して、私のために解決されます。
のpython manage.py syncdbの実行に
をDjangoの1.8
あなたのアプリはまだcontrib.authとして、これも問題になる可能性の移行を使用していない場合それらを使用します。私のアプリのマイグレーションを有効にすると、私のためにそれを解決しました。
$ ./manage.py makemigrations <my_app>
$ ./manage.py migrate
あなたは私の正気を救った。明らかに移行を抹消する場合は、移行フォルダと '__init__ 'を保持する必要があります。Djangoは最初の移行を作成することができず、続いて 'migrate'に失敗します。 –
のみ、その後残りの最初のアプリ(カスタム・ユーザー・モデルとの1)を移行し、そして:また、これが自動的に行われますことを確認する移行の順序を制御することができます
$ ./manage.py makemigrations <your_app>
$ ./manage.py migrate
$ ./manage.py makemigrations
$ ./manage.py migrate
を、https://docs.djangoproject.com/en/1.10/howto/writing-migrations/#controlling-the-order-of-migrationsを参照してください
ニースキャッチ。 Djangoのドキュメントは、Userモデルを拡張するときに、すぐにこれらのクラスをそのまま使用することを実際に勧めていることを考慮すると、間違いなく対処する必要があります。 – dustinfarris
ちょうど私が探している解決策。 – Charlesliam
それは私の日を救った! – neelix