所以我正在学习如何使用 Django,我目前正在尝试将我Person
的类与User
位于包 django.contrib.auth.models 中的 Django 类集成。我继承了这样的类:
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
使用人员实例查询信息,那也很棒。它们之间没有显式的外键,但继承必须说明一些问题。