Django admin - 扩展用户模型

时间:2017-01-01 22:04:58

标签: python django django-users django-modeladmin

我的要求是在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.在保存到数据库之前散列密码。

感谢您的帮助!

的问候,
沙善

0 个答案:

没有答案