2017-01-15 7 views
1

私はDjangoプロジェクト用のユーザーサインアップページを作成しようとしています。Django 1.10エラー、 'NoneType'オブジェクトが呼び出せません

私が持っているmodels.pyファイルが(離れて輸入から)次のものが含まれているcustom_userと呼ばれるアプリ:sign_upと呼ばれる別のアプリで

class CustomUserManager(BaseUserManager): 
    def create_user(self, identifier, password, email, full_name, date_of_birth): 
     user = self.model(
      identifier=identifier, 
      email=self.normalize_email(email), 
      full_name=full_name, 
      date_of_birth=date_of_birth 
     ) 
     user.set_password(password) 
     user.save(using=self._db) 

     return user 

    def create_superuser(self, identifier, password, email, full_name, date_of_birth): 
     # Almost same as previous method. 

class CustomUser(AbstractBaseUser, PermissionsMixin): 
    objects = CustomUserManager() 

    USERNAME_FIELD = 'identifier' 
    identifier = models.CharField(max_length=40, unique=True) 

    email = models.EmailField(max_length=200, unique=True) 
    full_name = models.CharField(max_length=200) 
    date_of_birth = models.DateField() 

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

    REQUIRED_FIELDS = ['full_name', 'email', 'date_of_birth'] 

    def get_full_name(self): 
     return self.full_name 
    def get_short_name(self): 
     return self.identifier 

、サインアップのためのビューをviews.pyファイルはをインポート

def index(request): 
    if request.method == 'POST': 
     form = CreateUserForm(request.POST) 

     if form.is_valid(): 
      # Create the new user. 
      manager = CustomUserManager() 

      user = manager.create_user(
       form.cleaned_data['identifier'], 
       form.cleaned_data['password'], 
       form.cleaned_data['email'], 
       form.cleaned_data['full_name'], 
       form.cleaned_data['date_of_birth'], 
      ) 

      return HttpResponseRedirect(reverse('sign_up:user_created')) 
    else: 
     form = CreateUserForm() 

    return render(request, 'sign_up/index.html', {'form': form}) 

:ように見えます(sign_upディレクトリのforms.pyに配置された)クラス:

from django.forms import ModelForm 
from custom_user.models import CustomUser 

class CreateUserForm(ModelForm): 
    class Meta: 
     model = CustomUser 
     fields = ['identifier', 'password', 'email', 'full_name', 'date_of_birth'] 

...そして最後にビューが使用するテンプレートが含まれています

<h1>Welcome to the signup page!</h1> 

<form action="{% url 'sign_up:index' %}" method="post"> 
{% csrf_token %} 
{{ form }} 
<input type="submit" value="Sign up" /> 
</form> 

をフォームが送信された場合(とform.is_valid()Trueを返すようです)、エラーメッセージ/sign_up/'NoneType'オブジェクトのTypeErrorは、の代わりに表示されますuser_createdビュー。

トレースバック:

ファイル "/Users/carltiden/anaconda/lib/python2.7/site-packages/django/core/handlers/exception.py" 内側 39応答で = GET_RESPONSE(リクエスト)_get_response 187応答= self.process_exception_by_middlewareで

ファイル "/Users/carltiden/anaconda/lib/python2.7/site-packages/django/core/handlers/base.py" ( e、request)

_get_responseでファイル "/Users/carltiden/anaconda/lib/python2.7/site-packages/django/core/handlers/base.py" 185応答= wrapped_callback(要求、* callback_args、** callback_kwargs)

「 インデックス 24 form.cleaned_data [ 'DATE_OF_BIRTH']、

ファイル で

ファイル "/Users/carltiden/GitHub/a_project/a_project/sign_up/views.py" /ユーザ/ carltiden/GitHub/a_project/a_project/custom_user/models.py "in create_user 15. date_of_birth = date_of_b irth

例外タイプ:sign_up /例外値/ ATはTypeError: 'NoneType' オブジェクトが

呼び出すことはできません(ライン15は、実際のコードでdate_of_birth=date_of_birth行である。)なぜこの出来事です。私はここで何が間違っていますか?

答えて

1

これは、マネージャをどのように使用するかはまったくありません。あなたはモデル定義の外で自分でインスタンス化することはありません。モデル自体を介してアクセスします。

if form.is_valid(): 
     user = CustomUser.objects.create_user(
      form.cleaned_data['identifier'], 
      form.cleaned_data['password'], 
      form.cleaned_data['email'], 
      form.cleaned_data['full_name'], 
      form.cleaned_data['date_of_birth'], 
     ) 
関連する問題