Django 自定义

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"),)  # 应为两个存在的字段  联合唯一索引 联合出现的值只能一次
原文地址:https://www.cnblogs.com/zhangchen-sx/p/10317450.html