2014-01-21 5 views
1

Я пытаюсь зарегистрировать пользователя в django, расширяя модуль auth. Я читал отсюда и там, и теперь я повсюду и не знаю, что делаю. Изначально я хотел сделать, это зарегистрировать пользователя с информацией именем, электронной почты, мобильный и пароль. с мобильный не по умолчанию django auth Я пытался расширить auth.Расширение модели пользователя в django

вот код.

models.py

from django.db import models 
from django.contrib.auth.models import User 
from django.db.models.signals import post_save 

class CustomerUserProfile(models.Model): 
    mobile = models.CharField(max_length = 20) 
    user = models.ForeignKey(User, unique=True) 

    def __str__(self): 
      return "%s's profile" % self.user 

def create_user_profile(sender, instance, created, **kwargs): 
    if created: 
     profile, created = CustomerUserProfile.objects.get_or_create(user=instance) 


post_save.connect(create_user_profile, sender=User) 

forms.py

from django import forms 
from django.contrib.auth.models import User 
from django.contrib.auth.forms import UserCreationForm 
from neededform.models import CustomerUserProfile 

class CustomerRegistrationForm(UserCreationForm): 
    email = forms.EmailField(required = True) 
    mobile = forms.CharField(max_length = 20) 


    class Meta: 
     model = User 
     fields = ('username','email','mobile','password1','password2') 

views.py

from django.shortcuts import render_to_response 
from django.http import HttpResponseRedirect 
from django.template import RequestContext 
from django.core.context_processors import csrf 
from neededform.forms import CustomerRegistrationForm 
from neededform.models import CustomerUserProfile 
from django.contrib.auth.models import User 

def register(request): 


    if request.method == 'POST': 

     form = CustomerRegistrationForm(request.POST) 
     if form.is_valid(): 
      f = form.save() 
     return HttpResponseRedirect('/registered/') 

    else: 
     args = {} 
     args.update(csrf(request)) 
     args['form'] = CustomerRegistrationForm() 

    return render_to_response('User_Registration.html', args ,context_instance = RequestContext(request)) 

Этот код при выполнении делает запись в auth_user табла e и запись в CustomerUserProfile, но мобильный coloumn всегда пуст.
Что еще я могу добавить в код?

PS. пожалуйста, может кто-нибудь объяснить мне, что этот код делает

def create_user_profile(sender, instance, created, **kwargs): 
     if created: 
      profile, created = CustomerUserProfile.objects.get_or_create(user=instance) 


post_save.connect(create_user_profile, sender=User) 

как я скопировал откуда-то я хочу знать, как это работает на самом деле.

спасибо.

+0

Django довольно подробно рассказывает о том, как расширить модель пользователя, поддерживая основные поля и добавляя некоторые дополнительные или полностью переопределяя всю модель пользователя: https://docs.djangoproject.com/en/1.6/topics/auth/customizing/# extend-the-existing-user-model – petkostas

+0

Не могли бы вы рассказать мне, что я делаю неправильно, а не петь песню в похвалу Django. Я новичок и не имею слишком много идей о том, что я делаю на самом деле. – Stark

+0

в примере показывает, как получить данные, и я хочу их сохранить. – Stark

ответ

0

Это 2-летний вопрос, но я удивлен, что не было правильного ответа. Мобильное поле не сохраняется в вашем профиле, просто потому, что вы создаете свой CustomerUserProfile через сигнал post_save, а поле для мобильных устройств не пересылается сигналом post_save.

Я бы предложил просто обновить ваш CustomerUserProfile, когда вы обрабатываете form.is_valid() в своей функции register.

Смежные вопросы