定义班级类,在MyApp目录下的models.py中插入如下代码定义班级类,在MyApp目录下的models.py中插入如下代码
models.Model
DateTimeField.auto_now
这个参数的默认值为false,设置为true时,能够在保存该字段时,将其值设置为当前时间,并且每次修改model,都会自动更新。因此这个参数在需要存储“最后修改时间”的场景下,十分方便。需要注意的是,设置该参数为true时,并不简单地意味着字段的默认值为当前时间,而是指字段会被“强制”更新到当前时间,你无法程序中手动为字段赋值;如果使用django再带的admin管理器,那么该字段在admin中是只读的。
DateTimeField.auto_now_add
这个参数的默认值也为False,设置为True时,会在model对象第一次被创建时,将字段的值设置为创建时的时间,以后修改对象时,字段的值不会再更新。该属性通常被用在存储“创建时间”的场景下。与auto_now类似,auto_now_add也具有强制性,一旦被设置为True,就无法在程序中手动为字段赋值,在admin中字段也会成为只读的。
BooleanField:可选项只有0和1~255两种```
NullBooleanField:可选项为null和yes,还有no三项
# 班级类
class Grade(models.Model):
# 班级名称
gname = models.CharField(max_length=10)
# 开班日期
gdate = models.DateTimeField()
# 女生数量
ggirlnum = models.IntegerField()
# 男生数量
gboynum = models.IntegerField()
# 是否已逻辑删除该班级
isDelete = models.BooleanField(default=False)
# 定义班级的打印输出信息
def __str__(self):
return self.gname
在加入一个模型student类
# 学生类
class Students(models.Model):
# 学生姓名
sname = models.CharField(max_length=20)
# 学生性别
sgender = models.BooleanField(default=True)
# 学生年龄
sage = models.IntegerField()
# 备注信息
sinfo = models.CharField(max_length=20)
# 是否已逻辑删除该学生
isDelete = models.BooleanField(default=False)
# 学生所属的班级
sgrade = models.ForeignKey(Grade)
#生成迁移文件(在MyApp下的migrations包中,迁移不成功可以删除掉里面的文件)
python manage.py makemigrations
#执行数据迁移
python mananger.py migrate
Sqlite(Xerial)
#先创建一个管理员身份
python manage.py createsuperuser
过程中要求输入账号和邮箱还有密码
完成后可以进入页面http://127.0.0.1:8000/admin
验证账号密码后进行简陋管理
@配置语言和时区
设置为中文,设置时区为上海,即settings
中:
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE='Asia/Shanghai'
添加自己的数据模型,在admin.py
中注册
#Student,Grade是之前所建模型的class名,还要导入所在库
from app.models import Grade, Students
admin.site.register(Grade)
admin.site.register(Students)
导入后可以在后台管理
不加这个的话值默认显示下面,里面只能添加名字
@个性化站点管理
也是在admin.py
中修改
创建数据管理类
class GradeAdmin(admin.ModelAdmin):
#要显示的字段
list_display = ('gname','gdate','ggirlnum')
#过滤字段
list_filter = ('gdate',)
#分页,每页显示多少条数据
list_per_page = 3
#搜索字段
search_fields = ('gname',)
添加完之后下面的注册也要修改不然没效果
admin.site.register(Grade,GradeAdmin)
@布尔值定制显示
也是在admin.py
中修改
效果:布尔类型的性别默认显示为True和False,我们通过几步简单配置使之显示为男女;
定义sgender字段的显示函数
class StudentAdmin(admin.ModelAdmin):
#定义sgender字段的显示函数
def getGender(self):
if self.sgender == True:
return '男'
else:
return '女'
#设置显示的标题
getGender.short_description = '性别'
#设置显示字段
list_display = ('sname',getGender,'sage','sinfo','sgrade')
@一方查看和添加多方数据
效果:就是在添加班级时,最下面出现2行默认的学生,方便快捷添加
此处以在班级中查看和添加学生为例;
创建班级的Admin
class GradeAdmin(admin.ModelAdmin):
inlines = [StudentInfo]
1
2
创建学生信息
class StudentInfo(admin.TabularInline):
model = Student
extra = 2
@使用模型数据在页面输出
先修改views.py
下的方法添加
# 查询所有学生
students =Students.objects.all()
# 构造数据字典
datadict={
#stu和页面内的stu相连可以随意取
'stu':students
}
# 将数据丢给templates/welcome.html进行渲染并呈现给用户
return render(request,'where.html',context=datadict)
页面内的使用
<ul>
#stu就是上面取得
{% for s in stu %}
<li>{{ s.sname }}li>
{% endfor %}
ul>
@配置语言和时区
设置为中文,设置时区为上海,即settings中:
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE='Asia/Shanghai'
@定制站点信息
在admin中继承AdminSite
class MyAdminSite(admin.AdminSite):
#浏览窗口显示的页面名称
site_title = '我的地盘'
#管理网页的页头部的标题
site_header = '学生管理系统'
#查看站点时跳转主页路由,默认/
site_url = '/welcome'
默认的系统模板位置:django/contrib/admin/templates/admin
将需要重新定制的文件复制出来,此处假设修改登录页面login.html
在自己的模板目录下创建相对应的子目录,即:/templates/admin/
修改拷贝的login.html