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
你可以foll由於[源](https://github.com/django/django/blob/master/django/contrib/auth/models.py#L151-L154),並且不要錯過'self'參數。 –
@SancaKembang謝謝我補充說,但仍然有問題。請參閱編輯。 – xec86
也'返回user',不要用它你的意見裏面......但只有'高清create_user(個體經營,EMAIL_ADDRESS,密碼):' –