Integrating django-profiles with django-registration



我对django还是个新手,但是我已经安装了django-profiles和django-registration,并且运行了最新的django 1.5.1。我也读了一些指南,即http://dmitko.ru/django-registration-form-custom-field/, http://birdhouse.org/blog/2009/06/27/django-profiles/, Django-Registration &;Django-Profile,使用自定义表单

我没有自定义django-registration,但我试着让我自己的profiles类看起来像这样:

from django.contrib.auth.models import User
class UsrProfile(models.Model):
    user = models.ForeignKey(User, unique=True, primary_key=True)
    ...custom fields here...

但我明白,有可能让用户注册,但它是一个单独的事情有配置文件,在用户可以注册而不必创建一个配置文件。

我的问题是,我怎么能坚持在配置文件类我做,进入注册?我想强制用户在注册时填写我在profiles类中指定的详细信息…

我试着遵循一些教程/指南在这里和那里,但我也一直卡住每当他们说修改url .py的东西:

url(r'^accounts/register/$',
    register,
    {'backend': ... form_class...
    ),

因为每当我尝试这个,"寄存器"(在第二行)似乎没有被识别,我不知道它指的是什么....我尝试这样做:

from registration.views import register

您可以扩展类user,并使用您想要的信息创建表单。

for extend User:models.py

User.add_to_class('phone', models.CharField(max_length=12))
User.add_to_class('books', models.ManyToManyField(Func,null=True,blank=True))

Form.py

class AddUserForm(forms.Form):
    username = forms.CharField(label="Rut",widget=forms.TextInput())
    email    = forms.EmailField(label="Correo Electronico",widget=forms.TextInput())
    password = forms.CharField(label="Password",widget=forms.PasswordInput(render_value=False))
    phone = forms.CharField(label="Telefono",widget=forms.TextInput())
    books = forms.ModelMultipleChoiceField(queryset=Book.objects.all(),label='Books')
def clean_username(self):
    username = self.cleaned_data['username']
    try:
        u = User.objects.get(username=username)
    except User.DoesNotExist:
        return username
    raise forms.ValidationError('Username is ready')
def clean_email(self):
    email = self.cleaned_data['email']
    try:
        u = User.objects.get(email=email)
    except User.DoesNotExist:
        return email
    raise forms.ValidationError('Email is ready')

view.py

def registerUser(request):
        form = AddUserForm()
    if request.method == "POST":
        form = AddUserForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            email = form.cleaned_data['email']
            password = form.cleaned_data['password']
            u = User.objects.create_user(username=username,email=email,password=password)
            u.phone = form.cleaned_data['phone']
            u.books = form.cleaned_data['books']
            u.save() 
            return HttpResponseRedirect('/users/')
        else:
            ctx = {'form':form}
            return      render_to_response('register.html',ctx,context_instance=RequestContext(request))
    ctx = {'form':form}
    return render_to_response('register.html',ctx,context_instance=RequestContext(request))

解决方案:

在自定义url.py

from registration.backends.default.views import RegistrationView
url(r'^register/$',
   RegistrationView.as_view(form_class=YourCustomForm),
   name='registration_register'),
),

代替:

from registration.views import register
url(r'^accounts/register/$',
    register,
    {'backend': ... form_class...
),

论述:

查看文档。

'form_class'参数:

"用于用户注册的表单类。可以在每个请求的基础上重写吗(见下面的>)。应该是实际的类对象。"

所以'YourCustomForm'是一个从RegistrationForm类扩展而来的表单,像这样:

class UserRegistrationForm(RegistrationForm):
    lastname = forms.CharField(widget=forms.TextInput(attrs=attrs_dict))
    ...

最新更新