0

我的要求是在 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. 在保存到数据库之前对密码进行哈希处理。

谢谢您的帮助!

问候,
沙尚克

4

0 回答 0