0

ユーザーモデルを拡張するために、ユーザーとOneToOneの関係を持つクライアントモデルがあります。ユーザーを(ユーザーフィールドとクライアントフィールドの両方を含むフォームで)登録できる必要があり、そのためにdjango-registrationを使用しました。私が見つけたいくつかのスニペットに基づいた登録のビューは次のとおりです。

def register_client(request):
    if request.method == 'POST':
        userform = UserForm(request.POST, prefix='user')
        clientform = ClientForm(request.POST, prefix='client')
        if userform.is_valid() and clientform.is_valid():
            user = userform.save()
            client = clientform.save(commit=False)
            client.user = user
            client.save()
            login(request, user)
            return HttpResponseRedirect('/webapp/')
        else:
            return HttpResponse('error!')

    else:
        userform = UserForm(prefix='user')
        clientform = ClientForm(prefix='client')

    t = loader.get_template('register.html')
    c = RequestContext(request, {
        'userform':userform,
        'clientform':clientform,
    })
    return HttpResponse(t.render(c)) 

そして、これが私のフォームです:

from registration.forms import RegistrationForm

class UserForm(RegistrationForm):   
    def save(self):
        new_user = User.objects.create_user(
            username=self.cleaned_data['username'],
            email = self.cleaned_data['email'],
            password=self.cleaned_data['password1'])
        new_user.backend='django.contrib.auth.backends.ModelBackend'
        new_user.save()
        return new_user

class ClientForm(forms.ModelForm):
    class Meta:
        model = Client
        exclude = ['user']

RegistrationFormは一般的なフォームのようなメソッドを実装していないため、UserFormにsave()メソッドを実装しました。

フォームを保存するために、バックエンドを実装するためにすべての問題を解決する必要があるのはなぜですか?この簡単な方法に問題はありますか?それは機能します。

new_user.backend='django.contrib.auth.backends.ModelBackend'(登録後にユーザーに自動的にログインできるように追加しました。)

4

2 に答える 2

0

あなたの質問にどう答えたらいいのかわかりません。コードが機能する場合は、問題はありません。しかし、zaphodが言ったように、django-registrationはユーザーの保存とアクティブ化を行います。ユーザーにデータを追加したい場合は、zaphodが提案したようなdjango-profilesも使用してください。

私自身はdjango-userenaを使用しています。これは、django-registrationとdjango-profilesが1つになっているようなものです。

于 2012-06-26T11:23:28.340 に答える
0

なぜユーザーモデルを保存する必要があるのですか?いくつかの異なる機能が必要でない限り、django-registrationがそれを行います。ユーザーごとに追加情報を保存する場合は、ユーザープロファイルを使用することをお勧めします。

于 2012-06-25T18:22:47.310 に答える