Django 自定义

时间:2022-06-05 16:22:04
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"),) # 应为两个存在的字段 联合唯一索引 联合出现的值只能一次