5

新しいユーザー登録を処理するためにdjango-registrationを使用している Django アプリケーションがあります。登録を許可するかどうかを決定する前にユーザーの年齢を確認できるように、登録フォームに生年月日を追加したいと考えています。ただし、生年月日をプロファイル情報として保存する必要はありません。これを登録フォームに追加し、登録プロセスの一環として年齢を確認するにはどうすればよいですか?

4

2 に答える 2

9

rz の回答には、うるう年が考慮されていないという小さな欠陥があります。

誰かが 1994 年 1 月 1 日に生まれた場合、rz の回答に記載されている生年月日チェックでは、2011 年 12 月 28 日に 18 であると計算されます。

うるう年を考慮した代替バージョンを次に示します。

from datetime import date
from registration.forms import RegistrationForm

class DOBRegistrationForm(RegistrationForm):
    date_of_birth = forms.DateField()

    def clean_date_of_birth(self):
        dob = self.cleaned_data['date_of_birth']
        today = date.today()
        if (dob.year + 18, dob.month, bod.day) > (today.year, today.month, today.day):
            raise forms.ValidationError('Must be at least 18 years old to register')
        return dob
于 2011-09-04T00:49:56.707 に答える
7

組み込みの登録フォームを拡張して、DOB フィールドと clean_ メソッドを追加し、特定の時間より前であることを検証します。何かのようなもの:

from datetime import datetime
from registration.forms import RegistrationForm

class DOBRegistrationForm(RegistrationForm):
    date_of_birth = forms.DateField()

    def clean_date_of_birth(self):
        dob = self.cleaned_data['date_of_birth']
        age = (datetime.now() - dob).days/365
        if age < 18:
            raise forms.ValidationError('Must be at least 18 years old to register')
        return dob

ビューでDOBRegistrationFormは、通常の と同じように使用しますRegistrationForm。を使用している場合はregistration.views.register、クラスをform_classパラメーターとして渡すだけです。

このようにして、DOB が許容範囲内にない場合、データベースに行を作成せずにフォーム エラーが発生します。

于 2010-12-13T20:57:35.593 に答える