1

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をカスタマイズしていませんが、次のような独自のプロファイルクラスを作成しようとしました:

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

しかし、ユーザーを登録させることは可能ですが、ユーザーがプロファイルを作成しなくても登録できるという点で、プロファイルを持つことは別のことであることは理解しています。

私の質問は、作成したプロファイル クラスを登録に固執するにはどうすればよいですか? ユーザーが登録するときに、プロファイル クラスで指定した詳細を入力するようユーザーに強制したい...

私はあちこちでいくつかのチュートリアル/ガイドに従ってみましたが、urls.py を次のように変更するように言われるたびに行き詰まります。

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

これを試すたびに、「レジスタ」(2行目)が認識されないようで、それが何を指しているのかわからないため....次のようなことを試します:

from registration.views import register

しかし、登録を有効なインポートとして認識していないようです...

4

2 に答える 2

0

解決策 :

カスタム 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))
    ...
于 2013-12-10T15:40:36.277 に答える
0

クラス ユーザーを拡張し、必要な情報を含むフォームを作成できます。

拡張ユーザーの場合: models.py

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

フォーム.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))
于 2013-05-27T03:42:11.137 に答える