だから私はDjangoの使い方を学んでおり、現在、自分のクラスをパッケージdjango.contrib.auth.modelsにあるPerson
Djangoのクラスと統合しようとしています。User
次のようにクラスを継承します。
class Person(User):
MALE = 'M'
FEMALE = 'F'
GENDER = (
(MALE, 'Male'),
(FEMALE, 'Female'),
)
birth_date = models.DateField()
gender = models.CharField(max_length = 1, choices = GENDER)
私のフォームは次のように定義されます。
class SignupForm(ModelForm):
MALE = 'M'
FEMALE = 'F'
GENDER = (
(MALE, 'Male'),
(FEMALE, 'Female'),
)
thisYear = date.today().year
YEARS = [thisYear - year for year in range(100)]
password = forms.CharField(widget = forms.PasswordInput(), min_length=5, max_length = 128)
birth_date = forms.DateField(widget=extras.SelectDateWidget(years = YEARS), initial='1990-01-01')
gender = forms.ChoiceField(choices = GENDER, initial='M')
class Meta:
model = Person
exclude = ('last_name', 'is_staff', 'is_active', 'is_superuser', 'last_login', 'date_joined', 'user_permissions', 'groups', 'attraction' )
#all fields in this list will map to a specific model attribute and will be comitted to the database
fields = ('username', 'password', 'first_name', 'email', 'gender', 'birth_date')
いくつかのことを除外しましたが、要点はわかります。私の見解では、新しい を作成するときはPerson
を呼び出します newPerson = signupForm.save(commit=False)
。
newPerson にいくつかの値を追加した後、 を呼び出しますnewPerson.save()
。
auth_user
このアクションは、テーブルとテーブルの 2 つの異なるテーブルに新しい行を作成しperson
ます。
テーブルにクエリを実行するauth_user
と、パスワードがハッシュされていないことがわかります。create_user
Django ソースを見ると、これは呼び出されたことがないことを示唆しています。誰かがこれがどのように機能するかを説明できますか?
auth_user
また、個人インスタンスを使用して情報を照会する方法を誰かが説明できれば、それも素晴らしいことです。それらの間に明示的な外部キーはありませんが、その継承は何かを説明する必要があります。