0

ユーザーがサインアップするときにメールを入力するように強制しようとしています。ModelForms で一般的にフォーム フィールドを使用する方法を理解しています。ただし、既存のフィールドを必須にする方法がわかりません。

私は次のモデルフォームを持っています:

class RegistrationForm(UserCreationForm):
    """Provide a view for creating users with only the requisite fields."""

    class Meta:
        model = User
        # Note that password is taken care of for us by auth's UserCreationForm.
        fields = ('username', 'email')

次のビューを使用してデータを処理しています。それがどれほど関連性があるかはわかりませんが、他のフィールド (ユーザー名、パスワード) がエラーで適切に読み込まれていることは言うまでもありません。ただし、 User モデルには、これらのフィールドが必要に応じて設定されています。

def register(request):
    """Use a RegistrationForm to render a form that can be used to register a
    new user. If there is POST data, the user has tried to submit data.
    Therefore, validate and either redirect (success) or reload with errors
    (failure). Otherwise, load a blank creation form.
    """
    if request.method == "POST":
        form = RegistrationForm(request.POST)
        if form.is_valid():
            form.save()
            # @NOTE This can go in once I'm using the messages framework.
            # messages.info(request, "Thank you for registering! You are now logged in.")
            new_user = authenticate(username=request.POST['username'], 
                password=request.POST['password1'])
            login(request, new_user)
            return HttpResponseRedirect(reverse('home'))
    else:
        form = RegistrationForm()
    # By now, the form is either invalid, or a blank for is rendered. If
    # invalid, the form will sent errors to render and the old POST data.
    return render_to_response('registration/join.html', { 'form':form }, 
        context_instance=RequestContext(request))

RegistrationForm にメール フィールドを作成しようとしましたが、効果がないようです。User モデルを拡張する必要があり、メール フィールドをオーバーライドする必要がありますか? 他のオプションはありますか?

ありがとう、

パラゴンRG

4

1 に答える 1

2

をオーバーライドし__init__て、メール フィールドを必須にします。

class RegistrationForm(UserCreationForm):
    """Provide a view for creating users with only the requisite fields."""

    class Meta:
        model = User
        # Note that password is taken care of for us by auth's UserCreationForm.
        fields = ('username', 'email')

    def __init__(self, *args, **kwargs):
        super(RegistrationForm, self).__init__(*args, **kwargs)
        self.fields['email'].required = True

この方法では、フィールドを完全に再定義する必要はなく、プロパティを変更するだけです。それがあなたを助けることを願っています。

于 2012-04-22T04:31:19.020 に答える