1

この質問は、ムキがここで説明したソリューションのフォローアップです。

django-registration にカスタム フィールドを追加する際の問題

Django-registration パッケージをインストールし、正常に使用しています。デフォルトでは、このパッケージを使用してアカウントを作成すると、ユーザー名、電子メール アドレス、およびパスワードが要求されます。(オプションの)名と姓も尋ねてほしい。上記のリンクにあるムキの答えは、その方法を説明しています。

ただし、Muki は、custom/forms.py で作成するファイルに何を入れるかを省略しています。ここで作成する必要があるクラスの名前と、フィールド定義がどのように見えるかを知る必要があります。

誰かが私がやろうとしていることを達成するために使用できるサンプルの forms.py を投稿できますか?

4

2 に答える 2

0

カスタム バックエンドがcustomフォルダー内にある場合、次のcustom/forms.pyようになります。

from django import forms
from registration.forms import RegistrationForm


class RegistrationFormWithName(RegistrationForm):
    first_name = forms.CharField(required=False)
    last_name = forms.CharField(required=False)

これにより、2 つのオプション フィールドがデフォルトの登録フォームに追加されます。デフォルトの代わりにこの新しいフォームを使用するようにカスタム バックエンドに指示するには、 Muki's answerget_form_classのメソッドを変更する必要があり、その方法を説明しています。custom/__init__.py

もちろん、first_nameおよびlast_nameフィールドからのデータの保存も処理する必要があります。

編集

次のcustom/__init__.pyようにする必要があります。

from registration.backends.default import DefaultBackend
from registration.backends.custom.forms import RegistrationFormWithName

class CustomBackend(DefaultBackend):
    def get_form_class(self, request):
        return RegistrationFormWithName

そしてcustom/urls.py、次のような行が必要です:

url(r'^register/$', register, {'backend': 'registration.backends.custom.CustomBackend'}, name='registration_register'),

両方のファイルのクラスの名前を、CustomBackend新しいバックエンドと呼んでいるものに変更します。

デフォルトのバックエンド ソースを見て、オーバーライドできる他のメソッドを理解してください。それが役立つことを願っています。

于 2013-02-02T20:44:50.460 に答える
0

このリンク はプロセスをよく説明しており、django-registration 1.0 で動作します

上記のコードに加えて、いくつかの追加のポインターを次に示します。

名を更新するには、models.py でこれを変更します

def user_registered_callback(sender, user, request, **kwargs):
profile = ExUserProfile(user = user)
profile.is_human = bool(request.POST["is_human"])
user.first_name = request.POST["firstname"]
user.save()
profile.save()

user_registered.connect(user_registered_callback)

そしてforms.pyファイルで

class ExRegistrationForm(RegistrationForm):
    is_human = forms.BooleanField(label = "Are you human?:")
    firstname = forms.CharField(max_length=30)
    lastname = forms.CharField(max_length=30)

最後に、フォームの変更を確認して、適切なテンプレートを作成します。アプリで admin.py というファイルを作成し、次のコードを記述することで、管理画面でプロファイルを確認できます。

from django.contrib import admin
from django.contrib.auth.models import User
from django.contrib.auth.admin import UserAdmin
from prof.models import ExUserProfile

admin.site.unregister(User)

class UserProfileInline(admin.StackedInline):
    model = ExUserProfile

class UserProfileAdmin(UserAdmin):
    inlines = [ UserProfileInline, ]

admin.site.register(User, UserProfileAdmin)
于 2013-07-02T05:30:53.137 に答える