AbstractUser を使用して、Django の標準 User モデルにフィールドを追加しようとしています。これは私のコードです:
class GUser(AbstractUser):
uuid = UUIDField(auto=True)
これが成功したのは、シェルから次のように言えるからです。
>>> a = GUser.objects.all()
>>> a
[<GUser: User1>]
>>> a[0].uuid
UUID('7d1f0b7b52144a2ea20db81ce74741e3')
私が抱えている問題は、/admin から新しいユーザーを登録することです。新しいユーザーを作成すると、データベース エラーが発生します。
no such table: auth_user
詳細に入る前に、これが私の forms.py です。
class GUserChangeForm(UserChangeForm):
class Meta:
model = get_user_model()
class GUserCreationForm(UserCreationForm):
class Meta:
model = get_user_model()
def clean_username(self):
username = self.cleaned_data["username"]
try:
get_user_model().objects.get(username=username)
except get_user_model().DoesNotExist:
return username
raise forms.ValidationError(self.error_messages['duplicate'])
そして私のadmin.py:
class GUserAdmin(UserAdmin):
form = GUserChangeForm
add_form = GUserCreationForm
fieldsets = (
(None, {'fields': [('username', 'password')]}),
('Personal info', {'fields': ('is_active','is_staff','is_superuser','groups', 'user_permissions')}),
('Important dates', {'fields': ('last_login', 'date_joined')}),
#('Universal ID', {'fields': ('uuid')})
)
admin.site.register(GUser,GUserAdmin)
これが他の人に起こったとき、彼らは(私がしたように)独自のフォームを実装してclean_username(self)を上書きしたことを読みました:
ただし、管理者からユーザーを追加しようとすると、これが呼び出されるとは思いません。GUserAdmin を登録しても、auth.forms.py ファイルが呼び出されます。
また、データベース (sqlite3) を削除してから python manage.py syncdb を呼び出すと、auth_user テーブルが実際に作成されていないことがわかります。
はい、settings.py に AUTH_USER_MODEL を含めました。
どんな助けでも大歓迎です。
たくさんのSOの投稿に加えて、私が抱えている問題を解決しているようには見えません。