2017-01-15 3 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 файл импортируеткласс (помещается в 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), сообщение об ошибке TypeError at/sign_up/'NoneType' объект не может быть вызван отображает вместо user_created вид.

Traceback:

Файл "/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)

Файл "/Users/carltiden/GitHub/a_project/a_project/sign_up/views.py" в индексных 24. form.cleaned_data [ 'date_of_birth'],

File «/ Users/carltiden/GitHub/a_project/a_project/custom_user/models.py "в create_user 15. date_of_birth = date_of_b Irth

Тип исключения: TypeError в/sign_up/Exception Значение: '' 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'], 
     ) 
Смежные вопросы