2014-09-30 3 views
0

이메일 (Django 1.7 Python 3.4 사용)을 통해 사용자 모델을 만들려고합니다. 관리자 클래스로 사용자 정의 사용자 모델을 만들었습니다. 하지만 내가 오류 받고 있어요 장고 관리자 패널에서 사용자 인스턴스를 편집하기 위해 노력하고있어 때/관리/계정// 1/ 'AccountForm'개체가 어떤 속성이없는 '수'AttributeError 'AccountForm'객체에 'get'속성이 없습니다.

계정에서

AttributeError를

Django 모델 API로 문제없이 사용자 데이터를 수정할 수 있습니다. 문제는 관리자 패널에서만 나타납니다. Traceback은 이메일 필드에서 뭔가 잘못되었지만 실제로는 무엇인지 깨닫습니다.

/home/oleshko/design/.virtualenvs/begemotik/lib/python3.4/site-packages/django/forms/widgets.py in value_from_datadict 


    return attrs 
def value_from_datadict(self, data, files, name): 
    """ 
    Given a dictionary of data and this widget's name, returns the value 
    of this widget. Returns None if it's not provided. 
    """ 
    return data.get(name, None) ... 
def id_for_label(self, id_): 
    """ 
    Returns the HTML ID attribute of this Widget for use by a <label>, 
    given the ID of the field. Returns None if no ID is available. 

▼ Local vars 
Variable Value 
name  
'email' 
data  
<django.forms.widgets.AccountForm object at 0x7f19280790b8> 
files 
{} 
self  
<django.contrib.admin.widgets.AdminEmailInputWidget object at 0x7f1928039a58> 

내 코드 :

models.py: 
class AccountManager (BaseUserManager) : 
    ''' ''' 
    def _create_user (self, email, password, is_staff = False, is_superuser = False, **extra_fields) : 
     ''' Creates a User with given email and password ''' 
     now = timezone.now() 
     if not email : 
      raise ValueError('wrong email') 
     email = self.normalize_email(email) 
     user = self.model(email = email, is_staff = is_staff, is_superuser = is_superuser, 
          last_login = now, date_joined = now, **extra_fields) 
     user.set_password(password) 
     user.save(using = self._db) 

     return user 


    def create_user (self, email, password = None, **extra_fields) : 
     ''' ''' 
     return self._create_user(email, password = None, **extra_fields) 


    def create_superuser (self, email, password, **extra_fields) : 
     ''' ''' 
     return self._create_user(email, password, is_staff = True, is_superuser = True, is_admin = True, **extra_fields) 



class Account (AbstractBaseUser, PermissionsMixin) : 
    ''' Custom user account inherits from both AbstractBaseUser and PermissionsMixin ''' 
    email  = models.EmailField(max_length = 255, unique = True, db_index = True, verbose_name = 'email') 
    first_name = models.CharField(max_length = 255, blank = True, null = True, verbose_name = 'name') 
    last_name = models.CharField(max_length = 255, blank = True, null = True, verbose_name = 'last name') 
    date_joined = models.DateTimeField(default = timezone.now) 

    USERNAME_FIELD = 'email' 
    REQUIRED_FIELDS = [ 'first_name' ] 

    is_active = models.BooleanField(default = True) 
    is_admin = models.BooleanField(default = False) 
    is_staff = models.BooleanField(default = False) 

    objects = AccountManager() 


    class Meta : 
     ''' ''' 
     verbose_name = 'user' 
     verbose_name_plural = 'users' 


    def get_full_name (self) : 
     ''' ''' 
     full_name = '{} {}'.format(self.first_name, self.second_name) 

     return full_name.strip() 


    def get_short_name (self) : 
     ''' ''' 
     return self.first_name 


    def email_user (self, subject, message, from_email = None) : 
     ''' ''' 
     send_mail(subject, message, from_email, [self.email]) 


    def __str__ (self) : 
     ''' ''' 
     return self.email 


forms.py 
User = get_user_model() 


class AccountCreationForm (UserCreationForm) : 
    ''' ''' 
    def __init__ (self, *args, **kargs) : 
     super(AccountCreationForm, self).__init__(*args, **kargs) 
     del self.fields[ 'username' ] 


    class Meta : 
     ''' ''' 
     model = User 
     fields = ('email',) 



class AccountChangeForm (UserChangeForm) : 
    ''' ''' 
    def __init__ (self, *args, **kargs) : 
     ''' ''' 
     super(AccountChangeForm, self).__init__(self, *args, **kargs) 
     del self.fields[ 'username' ] 


    class Meta : 
     ''' ''' 
     model = User 
     fields = ('email',) 


admin.py 
User = get_user_model() 

class AccountAdmin (UserAdmin) : 
    ''' ''' 
    form = AccountChangeForm 
    add_form = AccountCreationForm 

    list_display = ('email', 'first_name', 'last_name') 
    ordering = ('email',) 
    list_filter = ('is_staff', 'is_active', 'groups') 
    search_fields = ('email', 'first_name', 'last_name') 
    filter_horizontal = ('groups', 'user_permissions',) 
    ordering = ('email',) 
    fieldsets = (
     (None, { 'fields': ('email', 'password') }), 
     ('Personal info', { 'fields': ('first_name', 'last_name') }), 
     ('Permissions', { 'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions') }), 
     ('Important dates', { 'fields': ('last_login', 'date_joined') }), 
    ) 
    add_fieldsets = (
     (None, { 
      'classes': ('wide',), 
      'fields': ('email', 'first_name', 'last_name', 'password1', 'password2') } 
     ), 
    ) 


admin.site.register(User, AccountAdmin) 

전체 역 추적 :

Environment: 


Request Method: GET 
Request URL: http://127.0.0.1:8000/admin/accounts/account/1/ 

Django Version: 1.7 
Python Version: 3.4.0 
Installed Applications: 
('django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'debug_toolbar', 
'home', 
'accounts') 
Installed Middleware: 
('debug_toolbar.middleware.DebugToolbarMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware') 


Traceback: 
File "/home/oleshko/design/.virtualenvs/begemotik/lib/python3.4/site-packages/django/core/handlers/base.py" in get_response 
    111.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "/home/oleshko/design/.virtualenvs/begemotik/lib/python3.4/site-packages/django/contrib/admin/options.py" in wrapper 
    567.     return self.admin_site.admin_view(view)(*args, **kwargs) 
File "/home/oleshko/design/.virtualenvs/begemotik/lib/python3.4/site-packages/django/utils/decorators.py" in _wrapped_view 
    105.      response = view_func(request, *args, **kwargs) 
File "/home/oleshko/design/.virtualenvs/begemotik/lib/python3.4/site-packages/django/views/decorators/cache.py" in _wrapped_view_func 
    52.   response = view_func(request, *args, **kwargs) 
File "/home/oleshko/design/.virtualenvs/begemotik/lib/python3.4/site-packages/django/contrib/admin/sites.py" in inner 
    204.    return view(request, *args, **kwargs) 
File "/home/oleshko/design/.virtualenvs/begemotik/lib/python3.4/site-packages/django/contrib/admin/options.py" in change_view 
    1440.   return self.changeform_view(request, object_id, form_url, extra_context) 
File "/home/oleshko/design/.virtualenvs/begemotik/lib/python3.4/site-packages/django/utils/decorators.py" in _wrapper 
    29.    return bound_func(*args, **kwargs) 
File "/home/oleshko/design/.virtualenvs/begemotik/lib/python3.4/site-packages/django/utils/decorators.py" in _wrapped_view 
    105.      response = view_func(request, *args, **kwargs) 
File "/home/oleshko/design/.virtualenvs/begemotik/lib/python3.4/site-packages/django/utils/decorators.py" in bound_func 
    25.     return func.__get__(self, type(self))(*args2, **kwargs2) 
File "/home/oleshko/design/.virtualenvs/begemotik/lib/python3.4/site-packages/django/db/transaction.py" in inner 
    394.     return func(*args, **kwargs) 
File "/home/oleshko/design/.virtualenvs/begemotik/lib/python3.4/site-packages/django/contrib/admin/options.py" in changeform_view 
    1428.    errors=helpers.AdminErrorList(form, formsets), 
File "/home/oleshko/design/.virtualenvs/begemotik/lib/python3.4/site-packages/django/contrib/admin/helpers.py" in __init__ 
    349.    self.extend(list(six.itervalues(form.errors))) 
File "/home/oleshko/design/.virtualenvs/begemotik/lib/python3.4/site-packages/django/forms/forms.py" in errors 
    154.    self.full_clean() 
File "/home/oleshko/design/.virtualenvs/begemotik/lib/python3.4/site-packages/django/forms/forms.py" in full_clean 
    353.   self._clean_fields() 
File "/home/oleshko/design/.virtualenvs/begemotik/lib/python3.4/site-packages/django/forms/forms.py" in _clean_fields 
    362.    value = field.widget.value_from_datadict(self.data, self.files, self.add_prefix(name)) 
File "/home/oleshko/design/.virtualenvs/begemotik/lib/python3.4/site-packages/django/forms/widgets.py" in value_from_datadict 
    228.   return data.get(name, None) 

Exception Type: AttributeError at /admin/accounts/account/1/ 
Exception Value: 'AccountForm' object has no attribute 'get' 
+0

실제 추적을 게시하십시오. 게시 한 내용은 유용하지 않습니다. 디버그 페이지가 보이면 "복사하여 붙여 넣기보기로 전환"을 클릭하고 붙여 넣으십시오. –

+0

죄송합니다. –

답변

관련 문제