デフォルトのUserモデルが私にとってはうまくいかないことが明らかになったので、AbstractUser
モデルにすることにしました既存のテーブルを使用します。すべては私がDjangoの管理者でユーザーを編集するために行くとき以外は、作業をしているDjangoのデフォルトのUsersモデルからAbstractUserモデルに切り替えた後、AdminはUsers_groupsテーブルを探しています
かなり多く、私はエラーを取得しています:私が持っていないとして、このテーブルを検索しようとしている理由
ProgrammingError at /adminauthentication/user/100826/change/
(1146, "Table 'test_db.Users_groups' doesn't exist")
わかりませんそれを指定する必要があるドキュメントを思い出してはいけません。AbstractUser
は、最初にmigrate
(たとえばauth_group
など)で作成された他のデフォルトテーブルを使用します。
解決方法はわかりませんが、私はそれを検討しています。
# ./admin.py
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User
admin.site.register(User, UserAdmin)
# ./models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
# Extend the User model
class User(AbstractUser):
id = models.AutoField(primary_key=True)
username = models.CharField(max_length=255, blank=False, null=False, unique=True)
first_name = models.CharField(max_length=255, blank=True, null=True)
last_name = models.CharField(max_length=255, blank=True, null=True)
email = models.CharField(max_length=255, blank=True, null=True)
phone = models.CharField(max_length=255, blank=True, null=True)
password = models.CharField(max_length=255, blank=True, null=True)
ip_whitelist_1 = models.CharField(max_length=32, blank=True, null=True)
ip_whitelist_2 = models.CharField(max_length=32, blank=True, null=True)
ip_whitelist_3 = models.CharField(max_length=32, blank=True, null=True)
last_login = models.DateTimeField(blank=True, null=True)
password_changed = models.DateField(blank=True, null=True)
security_q1 = models.CharField(max_length=255, blank=True, null=True)
security_q2 = models.CharField(max_length=255, blank=True, null=True)
security_a1 = models.CharField(max_length=255, blank=True, null=True)
security_a2 = models.CharField(max_length=255, blank=True, null=True)
is_superuser = models.IntegerField(db_column='role', blank=False, null=False, default=0)
login_unlock_date = models.DateTimeField(blank=True, null=True)
challenge_unlock_date = models.DateTimeField(blank=True, null=True)
is_active = models.SmallIntegerField(db_column='active', blank=False, null=False, default=0)
updated = models.DateTimeField(blank=True, null=True)
date_joined = models.DateTimeField(db_column='created', blank=True, null=True)
is_staff = models.SmallIntegerField(blank=False, null=False, default=0)
REQUIRED_FIELDS = [
'first_name',
'last_name',
'email',
]
USERNAME_FIELD = 'username'
class Meta:
db_table = 'Users'
新しいモデルに切り替えたときにデータベースを削除し、すべての移行を再作成しましたか?移行システムは、組み込みユーザーから代替ユーザーへの移行ではうまくいかないことが文書化されています。 –
Django関連のテーブルを削除して、古いプロジェクトから任意の関連するファイルに新しいプロジェクトのコピーを開始しました。はい、ドキュメントごとにカスタムモデルの中間プロジェクトに変更する問題でした:https://docs.djangoproject.com/en/1.11/topics/auth/customizing/#changing-to-a-custom-user-model -mid-project。 'AbstractUser'はほとんどの場合デフォルトのユーザ設定を使用しており、どちらも初期の' migrate'で同じテーブルを作成していますので、探していたはずのデフォルトのユーザを使っているようです同じテーブル(私は思います)。 – sockpuppet