2017-02-27 29 views
0

我有我將要使用的用戶註冊,並要使用時,用戶數據被提交了在我的自定義用戶的經理無論如何定義,同樣的create_user功能,形式,這些值將以與輸入內容不相對應的方式進入數據庫,而每次,用戶email_address都將作爲「abstractuser.MyUser.object」輸入,而不是輸入給表單的內容。如何修改此代碼以將正確的值傳遞給create_user函數併成功創建用戶? 謝謝。通過形式調用自定義create_user失敗

Models.py

from __future__ import unicode_literals 

from django.db import models 
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin 

# Create your models here. 
class MyManager(BaseUserManager): 
    def create_superuser(self, email_address, password): 
     superuser = MyUser() 
     superuser.email_address = email_address 
     superuser.set_password(password) 
     superuser.is_staff = True 
     superuser.is_superuser = True 
     superuser.save() 

    def create_user(self, email_address, password): 
     user = MyUser() 
     user.email_address = email_address 
     user.set_password(password) 
     user.is_staff = True 
     user.is_superuser = False 
     user.save() 
     return user 

class MyUser(AbstractBaseUser, PermissionsMixin): 
    email_address = models.EmailField(unique=True, max_length=100) 
    is_staff = models.BooleanField(default=0) 

    object = MyManager() 

    USERNAME_FIELD = 'email_address' 

    def get_short_name(self): 
     return self.email_address 

Forms.py

from django.forms import ModelForm 
from django import forms 
from models import MyUser 

class AuthForm(ModelForm): 
    password = forms.CharField(widget=forms.PasswordInput) 
    class Meta: 
     model = MyUser 
     fields = ['email_address', 'password'] 

Views.py

from django.shortcuts import render 
from forms import AuthForm 
from django.contrib.auth import get_user_model 

# Create your views here. 
def user_create(request): 
    if request.method == "POST": 
     get_user_model().object.create_user(self, request.POST) 

    return render(request, 'abstractuser/user_create.html', {'form': AuthForm}) 

編輯

謝謝大家的投入,我已經添加了自參數的create_user功能,並添加自己的參數來調用create_user,不過,現在我得到的錯誤,「全局名稱的‘自我’是未定義'。在這種情況下獲得自我的正確方法是什麼?

TRACEBACK

Environment: 


Request Method: POST 
Request URL: http://localhost:8000/user/create 

Django Version: 1.10.5 
Python Version: 2.7.12 
Installed Applications: 
['abstractuser', 
'django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles'] 
Installed Middleware: 
['django.middleware.security.SecurityMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware'] 



Traceback: 

File "/home/dev/.local/lib/python2.7/site-packages/django/core/handlers/exception.py" in inner 
    39.    response = get_response(request) 

File "/home/dev/.local/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response 
    187.     response = self.process_exception_by_middleware(e, request) 

File "/home/dev/.local/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response 
    185.     response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "/home/dev/DjangoProjects/abstracttest/abstractuser/views.py" in user_create 
    8.   get_user_model().object.create_user(self, request.POST) 

Exception Type: NameError at /user/create 
Exception Value: global name 'self' is not defined 
+0

你可以foll由於[源](https://github.com/django/django/blob/master/django/contrib/auth/models.py#L151-L154),並且不要錯過'self'參數。 –

+0

@SancaKembang謝謝我補充說,但仍然有問題。請參閱編輯。 – xec86

+0

也'返回user',不要用它你的意見裏面......但只有'高清create_user(個體經營,EMAIL_ADDRESS,密碼):' –

回答

0

謝謝Sanca您的輸入,不過,這已經解決了下列附加到views.py user_create功能

get_user_model().object.create_user(request.POST['email_address'],request.POST['password']) 

和models.py MyManager .create_user看起來像這樣:

def create_user(self, email_address, password): 
    user = MyUser() 
    user.email_address = email_address 
    user.set_password(password) 
    user.is_staff = True 
    user.is_superuser = False 
    user.save() 
    return user