创建模型

  • 在应用中的model模块中定义模组,类似于创建数据库中的表结构,其中的数据类型众多,下面举个栗子:

    • Grades、Students是分别定义的模型,对应的就是数据库中的表

      • models.CharField() 字符串类型
        • max_lengeh 最大长度,不可省略
      • models.IntegerField() int类型
      • models.BooleanField() bool类型
        • default 默认值
      • models.TextField() 文本型

image.png

数据迁移

  • 在django中,如果开发项目数据表比较多,如果使用数据库手动的创建比较费时费力,可以直接使用django中的命令,在数据库中创建定义好的模型。如下,打开命令行,切到项目文件中,使用以下命令创建迁移文件,由于我的迁移文件已经存在,所以返回如下提示。

image.png

  • 迁移文件,migrations文件夹便是使用cmd创建的文件

image.png

  • 其中0001_initial.py中包含一些代码,如下,便是我创建的两个模组,到这一步仅仅是创建了模型,此时数据库中并没有创建表

image.png

  • 使用如下命令即可完成数据迁移,在数据库中就可以看到创建的数据表了

image.png
image.png

配置语言和时区

  • 如果不配置语言和时区则网站显示的是英文和国外时间

image.png

启动服务

  • runserver启动的是轻量级web服务器,用于测试

image.png

image.png

注册模型

  • 想要通过浏览器对后台数据进行可视化管理,需要将应用中对应的模型进行注册

image.png

  • 刷新浏览器

image.png

  • 点击进入Grades,发现数据不知道是什么

image.png

自定义管理页面

  1. from django.contrib import admin
  2. from .models import Grades,Students
  3. # 关联对象,在创建一个班级时可以直接添加几个学生,还可继承admin.StackInline
  4. class StudentsInfo(admin.TabularInline):
  5. # 关联的模型
  6. model = Students
  7. # 添加的条数
  8. extra = 2
  9. # 使用装饰器进行注册
  10. @admin.register(Grades)
  11. class GradesAdmin(admin.ModelAdmin): # 继承于admin.ModelAdmin
  12. # 自定义管理页面
  13. # 将关联对象添加
  14. inlines = [StudentsInfo]
  15. # 显示的字段
  16. list_display = ['grade', 'date_of_reg', 'students_num', 'master', 'is_delete']
  17. # 过滤器字段
  18. list_filter = ['grade', 'master']
  19. # 每一页的数据条数
  20. list_per_page = 5
  21. # 搜索字段
  22. search_fields = ['grade', 'date_of_reg', 'students_num', 'master', 'is_delete']
  23. # 显示字段先后顺序, fieldsets和feilds只能使用一个
  24. # fields = ['grade', 'students_num', 'master', 'date_of_reg', 'is_delete']
  25. fieldsets = [
  26. ('name', {'fields': ['grade', 'master']}),
  27. ('num', {'fields': ['students_num', 'date_of_reg', 'is_delete']})
  28. ]
  29. @admin.register(Students)
  30. class StudentsAdmin(admin.ModelAdmin):
  31. # 性别布尔值True显示男
  32. def show_gender(self):
  33. if Students.gender:
  34. return "男"
  35. else:
  36. return "女"
  37. list_display = ['s_name', 'student_id', show_gender, 'phone', 'introduce', 'grade']
  38. # 按钮位置
  39. actions_on_top = False
  40. actions_on_bottom = True

image.png

image.png

image.png