ユーザー登録に使用するフォームがあり、カスタムユーザーマネージャで定義されている同じ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})
EDIT
が入力ありがとうございました、私は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
[このソース](https://github.com/django/django/blob/master/django/contrib/auth/models.py#L151-L154)を参照してください。また、 'self'パラメータについても見逃しません。 –
@SancaKembangありがとうございます。私はそれを追加しましたが、まだ問題があります。編集をご覧ください。 – xec86
また、あなたのビュー内でそれを使用しないでください...しかし、 'def create_user(self、email_address、password):' –