提供一个学员管理系统,有一个前台页面展示现有学员,并供新学员提交申请,一个后台负责处理。
django在渲染前端页面时,会根据settings.py中的APP的顺序查找templates,如果不同的app中含有相同的html文件,则会按顺序进行渲染
# models.py
from django.db import models # Create your models here. class Student(models.Model): SEX_ITEMS = { (1, '男'), (2, '女'), (0, '未知'), } STATUS_ITEMS = { (0, '申请'), (1, '通过'), (2, '拒绝'), } name = models.CharField(max_length=128, verbose_name='姓名') sex = models.IntegerField(choices=SEX_ITEMS, verbose_name='性别') profession = models.CharField(max_length=128, verbose_name='职业') email = models.EmailField(verbose_name='邮箱') qq = models.CharField(max_length=128, verbose_name='QQ') phone = models.CharField(max_length=128, verbose_name='电话') status = models.IntegerField(choices=STATUS_ITEMS, default=0, verbose_name='审核状态') create_time = models.DateTimeField(auto_now=True, editable=False, verbose_name='创建时间') def __str__(self): return '<Student: {}>'.format(self.name) class Meta: verbose_name = verbose_name_plural = '学员信息'
# admin.py from django.contrib import admin from .models import Student # Register your models here. class StudentAdmin(admin.ModelAdmin): list_display = ('id', 'name', 'sex', 'profession', 'email', 'qq', 'phone', 'status', 'create_time') list_filter = ('sex', 'status', 'create_time') search_fields = ('name', 'profession') fieldsets = ( (None, { 'fields': ( 'name', ('sex', 'profession'), ('email', 'qq', 'phone'), 'status' ) }), ) admin.site.register(Student, StudentAdmin)
# views.py from django.shortcuts import render from .models import Student # Create your views here. def index(request): students = Student.objects.all() return render(request, 'index.html', {'students': students})
在admin,如果数据库表中的字段含有choice参数,Django会自动条用get_status_display方法,所以不用配置
在前端页面中,如果要调用含有choice参数的对象,则要调用get_Field_display方法
{# index.html #} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>学院列表</h1> {% for student in students %} <li>{{ student.name }} - {{ student.get_status_display }}</li> {% endfor %} </body> </html>