2017-01-15 20 views
1

我想爲Django項目構建一個用戶註冊頁面。Django 1.10錯誤,'NoneType'對象無法調用

我有稱爲custom_user一個應用程序,其中models.py文件包含以下(除了進口):

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 

在稱爲sign_up另一個應用程序,用於簽約的視圖看起來:

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}) 

views.py文件導入CreateUserForm類(放在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'對象的類型錯誤不可調用顯示,而不是user_created查看。

回溯:

文件 「/Users/carltiden/anaconda/lib/python2.7/site-packages/django/core/handlers/exception.py」 在內 39.響應= get_response(請求)

文件 「/Users/carltiden/anaconda/lib/python2.7/site-packages/django/core/handlers/base.py」 在_get_response 187.響應= self.process_exception_by_middleware( e,請求)

文件 「/Users/carltiden/anaconda/lib/python2.7/site-packages/django/core/handlers/base.py」 在_get_response 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「 create_user 15. date_of_birth = date_of_b IRTH

異常類型:類型錯誤在/ sign_up /異常值: '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'], 
     ) 
相關問題