django-registrationフォームに年齢の検証を追加するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/4433030

  •  09-10-2019
  •  | 
  •  

質問

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

役に立ちましたか?

解決

組み込みの登録フォームを拡張して、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が許可されている範囲にない場合、フォームエラーが表示されます。

他のヒント

RZの答えには、Leap年を考慮していないという点で、わずかな欠陥があります。

誰かが1994年1月1日に生まれた場合、RZの回答で言及された生年月日チェックは、2011年12月28日に18歳と計算されます。

Leapを考慮に入れる代替バージョンは次のとおりです。

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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top