我的要求是在Django中创建两种类型的用户 1.学生 2.教师
我通过创建MyProfile模型扩展了Django用户模型:
class MyProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
#Profile Information
photo = FilerImageField(
blank = True,
help_text = 'Profile Pic',
null = True,
on_delete = models.SET_NULL
)
#Student Information
enrollment = models.CharField('Enrollment',
blank = True,
default = '',
help_text = 'Student Enrollment Number',
max_length = 20,
)
admission_date = models.DateField('Admission Date',
blank = True,
default = None,
null = True,
help_text = 'Date when student joined the college',
)
def __unicode__(self):
return unicode(self.user.username)
现在,如果我创建一个用户,那么 对于学生: - 字段喜欢'注册',' admission_date'是强制性的但是 对于教师: - 这些字段不是必需的。
现在在admin.py文件中,我在下面做了:
class ProfileInline(admin.StackedInline):
model = MyProfile
fieldsets = (
('Profile Information', {
'classes': ('collapse',),
'fields': ('photo')
}),
('Student Information', {
'classes': ('collapse',),
'fields': (
('enrollment', 'admission_date'),
}).
)
@admin.register(User)
class MyUserAdmin(admin.ModelAdmin):
list_display = ('username', 'first_name', 'last_name', 'email', 'is_staff', 'is_active',)
search_fields = ('username', 'first_name', 'last_name', 'email',)
list_filter = ('is_staff', 'is_active',)
inlines = [
ProfileInline,
]
fieldsets = (
('User Information', {
'fields': ('username', ('first_name', 'last_name'), 'password', 'groups', 'is_active')
}),
)
我创建了两组:
学生
2.教师
现在第一个问题是:
1.如果我们创建用户并选择“学生”。小组然后如何检查是否注册' &安培; ' admission_date'字段是否填充。如果没有,则向用户显示包含必填字段的错误消息
2.如果我们创建用户并选择教师'然后它不应该检查这些字段。
第二个问题是:
如果您看到" MyUserAdmin"在admin.py中,我已经包含了密码'在fieldsets中。当我们使用django admin创建用户时,它会将密码字段显示为普通输入文本框。此外,在保存到数据库之前,它不会对密码进行哈希处理
1.我如何显示密码' &安培; '验证密码'框。
2.在输入栏中使用密码类型
3.在保存到数据库之前散列密码。
感谢您的帮助!
的问候,
沙善