我的要求是在 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)
现在,如果我创建一个用户,那么
对于学生:- 像“注册”、“录取日期”这样的字段是强制性的,但
对于教职员工:- 这些字段不是必需的。
现在在 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.学生
2.教师
现在第一个问题是:
1. 如果我们创建一个用户并选择“学生”组,那么如何检查“注册”和“入学日期”字段是否填写。如果没有,则向用户显示错误消息,说明有必填字段。
2. 如果我们创建一个用户并选择“教师”组,那么它不应该检查这些字段。
第二个问题是:
如果您在 admin.py 中看到“MyUserAdmin”类,我在字段集中包含了“密码”。当我们使用 django admin 创建用户时,它会将密码字段显示为纯输入文本框。此外,它不会在保存到数据库之前对密码进行哈希处理。
1. 如何显示“密码”和“验证密码”框。
2.在输入字段中使用密码类型。
3. 在保存到数据库之前对密码进行哈希处理。
谢谢您的帮助!
问候,
沙尚克