2017-09-27 8 views
0

デフォルトの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' 
+0

新しいモデルに切り替えたときにデータベースを削除し、すべての移行を再作成しましたか?移行システムは、組み込みユーザーから代替ユーザーへの移行ではうまくいかないことが文書化されています。 –

+0

Django関連のテーブルを削除して、古いプロジェクトから任意の関連するファイルに新しいプロジェクトのコピーを開始しました。はい、ドキュメントごとにカスタムモデルの中間プロジェクトに変更する問題でした:https://docs.djangoproject.com/en/1.11/topics/auth/customizing/#changing-to-a-custom-user-model -mid-project。 'AbstractUser'はほとんどの場合デフォルトのユーザ設定を使用しており、どちらも初期の' migrate'で同じテーブルを作成していますので、探していたはずのデフォルトのユーザを使っているようです同じテーブル(私は思います)。 – sockpuppet

答えて

0

私はちょうどそれは本当に私が現在、午前何かを傷つけていませんでしたので、それを手放すつもりだったとして[OK]を、最終的にそれを見て時間がかかりました。

ドキュメント内にあるかもしれないし、答えが他の場所に投稿されている可能性もありますが、私は見ていませんでした。

代わりに私はデフォルトを使用している別のDBを見ました。 3つのテーブルが欠落していました:

auth_user 
auth_user_groups 
auth_user_user_permissions 

私はそれが1は問題ではなかったことから出テーブルであることにつきauth_userにちょうどUsersを変更したので。それはUsers_groupsUsers_user_permissionsと呼ばれなければならない他の2つを作らなかった。最初に./manage.py makemigrations - >./manage.py migrateで作成されなかった理由は不明です。

とにかく、私の場合はこれが処理されましたが、Users以外のユーザーテーブルは機能しません。

CREATE TABLE Users_user_permissions (
    id integer PRIMARY KEY, 
    user_id integer, 
    permission_id integer 
); 

CREATE TABLE Users_groups (
    id integer PRIMARY KEY, 
    user_id integer, 
    group_id integer 
); 
関連する問題