from django.db import models class MyCharfield(models.Field): def __init__(self,max_length,*args,**kwargs): self.max_length = max_length super(MyCharfield,self).__init__(max_length = max_length,*args,**kwargs) def db_type(self,connection): return 'char(%s)'% self.max_length class Person(models.Model): pid = models.AutoField(primary_key=True,) name =models.CharField(max_length=32,db_column='new_name',verbose_name='姓名') # 指定列名 orm操作还是name age = models.IntegerField(null=True,blank=True,verbose_name='年龄',help_text='填写真实年龄') # 数据可为空, 填充可为空 # birth = models.DateTimeField(auto_now_add=True) # 创建时提交当前时间 birth = models.DateTimeField(auto_now=True) # 每次修改保存当前时间 # auto_now_add auto_now default 3个互斥 phone = MyCharfield(max_length=11,) # 不可编辑-不显示 gender = models.IntegerField(default=3,choices=((1,'男'),(2,'女'),(3,'不详'))) # 选择 def __str__(self): return '{} - {}'.format(self.pid,self.name) class Meta: #元类 信息 # 数据库中生成的表名称 默认 app名称 + 下划线 + 类名 db_table = "person" # 改表名 # admin中显示的表名称 verbose_name = '个人信息' # verbose_name加s verbose_name_plural = '所有用户信息' # 联合索引 index_together = [ ("pub_date", "deadline"), # 应为两个存在的字段 遵循最左前缀 ] # 联合唯一索引 unique_together = (("driver", "restaurant"),) # 应为两个存在的字段 联合唯一索引 联合出现的值只能一次