Django模型
设计系统表定义
-
Django 提供完善的模型(model)层主要用来创建和存取数据,不需要我们直接对数据库操作。
-
每个模型是一个 Python 类,继承 django.db.models.model 类。
- 该模型的每个属性表示一个数据库表字段。
表的创建
- 打开.../sign/models.py 文件,完成表的创建。
from django,db import models
from django.db.models.deletion import CASCDE
class Event(model.Mpdel):
name=models.CharField(max_lengh=100)#发布会标题
limit=modles.IntegerField()#参加人数
status=models.BooleanField()#状态
address=models.CharField(max_lengh=200)"#发布会地址
start_time=models.DatetimeField("event time")#发布会时间
create_time=models.DatetimeField(auto_now='ture')#创建时间自动获取当前时间
def __str__(self):
return self.name
class Guest(model.Model):
event = modles.ForeignKey(Event,on_delete=models.CASCDE) #创建外键,关联两个表,注意这是两个参数
realname = models.CharField(max_length=64) # 姓名phone = models.CharField(max_length=16) # 手机号email = models.EmailField() # 邮箱sign = models.BooleanField() # 签到状态create_time = models.DateTimeField(auto_now=True) # 创建时间(自动获取当前时间)class Meta:unique_together = ("event", "phone")def __str__(self):return self.realname
首先,发布会表和嘉宾表中默认都会生成自增 id,而我们在创建模型时不需要声明该字段。
其次,发布会表中增加了 status 字段用于表示发布会的状态是否开启,用于控制该发布会是否可用。再次,嘉宾表中通过 event_id 关联发布会表,一条嘉宾信息一定所属于某一场发布会。
最后,对于一场发布会来说,一般会选择手机号作为一位嘉宾的验证信息,所以,对于一场发布会来说,手机号必须是唯一。除了嘉宾 id 外,这里通过发布会 id +手机号来做为联合主键。
__str__()方法告诉 Python 如何将对象以 str 的方式显示出来。所以,为每个模型类添加了__str__()方法。
- 然后执行python manage.py makemigrations sign进行数据库迁移。
-
在执行python3 manage.py migrate。 需指定python版本要不会报错
admin后台管理
- 创建的嘉宾表和发布会可以通过admin后台管理
打开.../sign/admin.py 文件
from django.contrib import admin
from sign.model import Event,Guest #载入发布会和事件表
class Eventadmin(admin.ModelAdmin): #创建事件表格
list_display = ['name', 'status', 'start_time','id']。#添加字段(这些字段名称必须是模型中的 Event()类定义的。)
class GuestAdmin(admin.ModelAdmin):list_display = ['realname', 'phone','email','sign','create_time','event']
admin.site.register(Event,EventAdmin)admin.site.register(Guest,GuestAdmin). #用admin.site.register()函数注册模块,关联上函数,需要传两个参数,一个名称在前端显示,一个关联 - admin后台定制
生成搜索栏和过滤器,修改admin.py
search_fields=['name']
search_fields 用于创建表字段的搜索器,可以设置搜索关键字匹配多个表字段
list_filter=["status"]list_filter 用于创建字段过滤器。