2017-09-27 33 views
0

顯然,默認的用戶模型不適用於我,也未對其進行擴展,因此決定將AbstractUser模型設置爲使用現有的表格。從Django的默認用戶模型切換到AbstractUser模型後,Admin正在查找Users_groups表

幾乎必須一切工作,除非我去編輯Django管理用戶,我得到一個錯誤:

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項目。由於'AbstractUser'主要使用默認的用戶設置,並且它們都使用最初的'migrate'創建相同的表格,所以似乎只是使用默認用戶我也會碰到這個問題,因爲它應該一直在尋找同一張桌子(我會想)。 – sockpuppet

回答

0

好了,最後花時間來看看它,因爲我只是要讓它去,因爲它並沒有真正傷害任何東西在那裏我目前是。

也許它在文檔中,或者答案已發佈到其他地方,但我沒有看。

我反而看着另一個使用默認值的數據庫。三桌人失蹤:

auth_user 
auth_user_groups 
auth_user_user_permissions 

因爲我改變auth_user只是Users每它作爲一個退出表一個不是問題。它沒有使另外兩個必須被稱爲Users_groupsUsers_user_permissions。不知道爲什麼他們不是最初的./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 
);