因此,我正在學習如何使用Django,並且我正在嘗試將我的Person
類與位於包django.contrib.auth.models中的Django的User
類集成。我繼承類是這樣的:那麼繼承django.contrib.auth.models導致不哈希密碼
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
表和person
表。
如果我查詢auth_user
表,我發現我的密碼從未散列過。查看Django源代碼,這表明create_user
從未被調用過。有人可以向我解釋這是如何工作的嗎?
此外,如果任何人都可以解釋我如何查詢auth_user
信息與個人實例,這也會很好。他們之間沒有明確的外鍵,但繼承必須考慮到某些事情。