2017-04-24 40 views
1

我覆蓋默認模型AbstractUse通過電子郵件進行授權。「django.contrib.admin.sites.NotRegistered:模型用戶未註冊」當我想註冊自定義用戶時出現此錯誤。

applications.account.models.py

# -*- coding: utf-8 -*- 
import datetime 

from django.db import models 
from django.contrib.auth.models import AbstractUser 

class User(AbstractUser): 

class Meta(AbstractUser.Meta): 
    swappable = 'AUTH_USER_MODEL' 

USERNAME_FIELD = 'email' 

applications.account.admin.py ,用我的自定義用戶admin.py文件。 我試圖註冊的默認用戶模型和註冊自定義。

# -*- coding: utf-8 -*- 
from django.contrib import admin 
from django.http import HttpResponseRedirect 
from django.contrib.auth.models import User 

from modeltranslation.admin import TabbedTranslationAdmin 
from applications.account.models import Profile, Phone, ShippingAddress, PartnerGC, Referral, Operation 
from applications.account.models import User as MyUser 


class UserInline(admin.StackedInline): 
    model = Profile 
    max_num = 1 
    can_delete = False 


class OperationInline(admin.StackedInline): 
    model = Operation 
    can_delete = True 


class PhoneInline(admin.StackedInline): 
    model = Phone 
    can_delete = True 


class PartnerGCInline(admin.StackedInline): 
    model = PartnerGC 
    max_num = 1 
    can_delete = True 


class ReferralInline(admin.StackedInline): 
    model = Referral 
    max_num = 1 
    can_delete = True 


class ShippingAddressInline(admin.StackedInline): 
    model = ShippingAddress 
    can_delete = True 


class ProfileAdmin(admin.ModelAdmin): 
    list_filter = ["date_joined"] 
    search_fields = ["=id", "first_name", 'last_name', "email"] 
    list_display = ('id', "email", 'first_name', 'last_name', 'date_joined', 
        'last_login') 
    actions = ['mark_active', 'mark_inactive'] 
    inlines = [UserInline, PhoneInline, ShippingAddressInline, PartnerGCInline, ReferralInline, OperationInline] 

    def user_email(self, instance): 
     return instance.user.email 
    user_email.short_description = u"E-mail" 

    def user_active(self, instance): 
     return instance.user.is_active 
    user_active.short_description = u"Активен" 
    user_active.boolean = True 

    def user_staff(self, instance): 
     return instance.user.is_staff 
    user_staff.short_description = u"Персонал" 
    user_staff.boolean = True 

    def user_superuser(self, instance): 
     return instance.user.is_superuser 
    user_superuser.short_description = u"Администратор" 
    user_superuser.boolean = True 

    def user_date_joined(self, instance): 
     return instance.user.date_joined 
    user_date_joined.short_description = u"Дата регистрации" 

    def user_last_login(self, instance): 
     return instance.user.last_login 
    user_last_login.short_description = u"Последняя активность" 

    def mark_active(self, request, queryset): 
     queryset.update(user__is_active=True) 
     return HttpResponseRedirect('') 
    mark_active.short_description = u"Активировать выбранные профили" 

    def mark_inactive(self, request, queryset): 
     queryset.update(user__is_active=False) 
     return HttpResponseRedirect('') 

admin.site.unregister(User) 
admin.site.register(MyUser, ProfileAdmin) 
+0

發表您的'INSTALLED_APPS' – itzMEonTV

+0

我有「applications.account」,在我的INSTALLED_APPS –

回答

4

如果你已經設置AUTH_USER_MODEL設置自定義模式,則默認User應用程序不應該被註冊。因此,你應該刪除試圖註銷默認的用戶模型行:

admin.site.unregister(User) 
+0

是的,我接着說:AUTH_USER_MODEL =「應用.account.model.User''在我的設置中,然後註冊自定義用戶'admin.site.register(MyUser,ProfileAdmin)',但我得到一個新的錯誤'ValueError:太多值解開' –

+0

設置應該是'AUTH_USER_MODEL ='',即'AUTH_USER_MODEL ='account.User'。如果您在正確設置AUTH_USER_MODEL之前運行了'makemigrations'或'migrate',那麼您可能必須刪除您的遷移文件並刪除數據庫,因爲它們將使用默認的'User'模型。 – Alasdair

+0

我明白了,但我不能刪除我的遷移和刪除數據庫,因爲它是一個工作站點。 –