2017-04-24 39 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

我明白了,但我不能删除我的迁移和删除数据库,因为它是一个工作站点。 –