class StudentArea(models.Model): name = fields.CharField(max_length=32, verbose_name='地区', show_word_limit=True) def __str__(self): return self.name
class Layer(models.Model): name = fields.CharField(max_length=32, verbose_name='名字') def __str__(self): return self.name class Meta: verbose_name = 'Layer Action弹出框' verbose_name_plural = 'Layer Action弹出框'
class ManyToManyModel(models.Model): name = fields.CharField(max_length=128, verbose_name='名字', default='张三') many_to_many = fields.ManyToManyField(StudentManyToManyModel, blank=True, verbose_name='多对多字段') class Meta: verbose_name = '多对多 Select' verbose_name_plural = '多对多 Select' def __str__(self): return self.name
class OneToOneModel(models.Model): name = fields.CharField(max_length=128, verbose_name='名字', default='张三') one_to_one = fields.OneToOneField(StudentOneToOneModel, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='一对一字段', filterable=True) class Meta: verbose_name = '一对一 Select' verbose_name_plural = '一对一 Select' def __str__(self): return self.name
class StudentModel(models.Model): name = fields.CharField(max_length=128, verbose_name='名字', default='张三') sex_choices = ( (0, '男'), (1, '女'), (2, '未知'), ) sex = fields.RadioField(verbose_name='性别', default=0, choices=sex_choices) star = fields.RateField(verbose_name='评价', default=5, help_text='给用户评级') money = fields.InputNumberField(verbose_name='存款', default=0) score = fields.SliderField(verbose_name='考试分数', default=100) # ForeignKey和OneToOneField、ManyToManyField 都支持两个参数 # action 是指 select在搜索的时候 请求的url,后台只需要返回 一个数组就可以搜索数据了。[{'text':'张三','id':'123'}] # queryset 是指 select 默认展示数据的时候 框架会调用get_queryset 可以进行数据过滤这一类处理。 # 外键字段 如果不指定action,可以在admin中配置:autocomplete_fields = ('classes',) 就可以自动搜索了。不配置两者 就只能列表过滤 classes = fields.ForeignKey( StudentClasses, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='班级', help_text='一对多', clearable=True, placeholder='选择班级', queryset=get_student_class_queryset, # 这里这里可以传入function,但是返回的必须是个queryset,也可以传入queryset limit=5, # 这里限制默认显示的结果数量,设置下可以防止爆内存 ) area = fields.ForeignKey( StudentArea, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='地区', help_text='一对多', clearable=True, placeholder='选择地区', # 指定自定义的url action='/area/search') class Meta: verbose_name = '一对多 Select' verbose_name_plural = '一对多 Select' def __str__(self): return self.name
class UUIDKeyModel(models.Model): uid = models.UUIDField(primary_key=True, verbose_name='uuid', default=get_uuid, editable=False) name = fields.CharField(max_length=32, verbose_name='名字') def __str__(self): return str(self.uid) class Meta: verbose_name = 'UUID支持' verbose_name_plural = 'UUID支持'
class ExtInfo(models.Model): name1 = fields.CharField(max_length=128, verbose_name='字段1', null=True, blank=True) name2 = fields.CharField(max_length=128, verbose_name='字段2', null=True, blank=True) name3 = fields.CharField(max_length=128, verbose_name='字段3', null=True, blank=True) name4 = fields.CharField(max_length=128, verbose_name='字段4', null=True, blank=True) title = fields.ForeignKey( Title, on_delete=models.SET_NULL, blank=False, null=True, )
class TransferModel(models.Model): name = fields.CharField(max_length=32, verbose_name='名字') transfer = fields.TransferField(TransferManyToManyModel, blank=True, verbose_name='穿梭框', help_text='基于many_to_many字段', filterable=True, # 允许列表搜索 placeholder='输入关键字搜索', # 搜索框占位符 titles=['待选', '已选'], # 自定义穿梭框title button_texts=['往左', '往右'] # 自定义按钮文本 ) def __str__(self): return self.name class Meta: verbose_name = 'Transfer 穿梭框' verbose_name_plural = 'Transfer 穿梭框'
class Department(models.Model): name = fields.CharField(max_length=128, verbose_name='部门名', help_text='一个部门的名字应该唯一', unique=True, db_index=True) create_time = fields.DateTimeField(verbose_name='创建时间', auto_now=True) class Meta: verbose_name = "部门" verbose_name_plural = "部门管理" """ 如果有__unicode__ 方法,将会优先调用,没有在调用__str__方法 """ def __unicode__(self): return '部门' + self.name def __str__(self): return self.name
class CharModel(models.Model): """ 文本输入框,包含:input、password、textarea """ # 这里的max_length是数据库字段的长度,也是界面上文本框可输入的长度 # type属性 对应input原生的type # style 原生属性,可通过width设置宽度 # 普通文本框 f1 = fields.CharField(verbose_name='基础输入框', max_length=128, input_type='text', placeholder='单行输入', autocomplete=False, style='width:100px;color:red;') # 多行文本框 # 如果设置了style的高度,就不要设置 rows属性了,不然样式会乱掉 f2 = fields.CharField(verbose_name='多行输入', max_length=128, input_type='textarea', show_word_limit=True, placeholder='多行输入', clearable=False, style='width:500px;', rows=20) # 密码输入框 f3 = fields.CharField(verbose_name='密码', placeholder='请输入密码', max_length=128, show_password=True) f4 = fields.CharField(verbose_name='左边带图标', suffix_icon="el-icon-date", max_length=128) f5 = fields.CharField(verbose_name='右边带图标', prefix_icon="el-icon-search", max_length=128) f6 = fields.CharField(verbose_name='显示可输入长度', max_length=128, show_word_limit=True) # solt取值:prepend、append f7 = fields.CharField(verbose_name='复合输入框', max_length=128, slot='prepend', slot_text='https://', null=True, blank=True) f8 = fields.CharField(verbose_name='复合输入框', max_length=128, slot='append', slot_text='.com', null=True, blank=True) class Meta: verbose_name = 'Char文本输入框' verbose_name_plural = 'Char文本输入框'
class Employe(models.Model): name = fields.CharField(max_length=128, verbose_name='名称', help_text='员工的名字', null=False, blank=False, db_index=True) avatar_img = fields.ImageField(verbose_name='照片', null=True, blank=False, help_text='员工的照片,在列表会默认显示为图片') gender_choices = ( (0, '未知'), (1, '男'), (2, '女'), ) # images = fields.ManyToManyField(Image, blank=True, verbose_name='照片列表') gender = fields.IntegerField(choices=gender_choices, verbose_name='性别', default=0) idCard = fields.CharField(max_length=18, verbose_name='身份证号', help_text='18位的身份证号码', blank=True, null=True) phone = fields.CharField(max_length=11, verbose_name='手机号') birthday = fields.DateField(verbose_name='生日') time = fields.TimeField(verbose_name='时间', auto_now=True) department = fields.ForeignKey(Department, on_delete=models.SET_NULL, blank=False, null=True, verbose_name='部门', db_index=True) title = fields.ForeignKey(Title, on_delete=models.SET_NULL, blank=False, null=True, verbose_name='职务', db_index=True) enable = fields.SwitchField(verbose_name='状态', default=True) create_time = fields.DateTimeField(verbose_name='创建时间', auto_now=True) update_time = fields.DateTimeField(verbose_name='更新时间', auto_now=True) def test1(self): return format_html('<img src="{}" height="50" width="50">', 'https://www.88cto.com/static/images/logo.png') def test2(self): if self.title: return format_html('<span style="color:red;">{}</span>', self.title.name) else: if self.department: return format_html('<span style="color:red;">{}</span>', self.department.name) def department_id(self): if self.department: return self.department.id return "" department_id.short_description = '部门id' test2.short_description = '测试' class Meta: verbose_name = "员工" verbose_name_plural = "员工管理" permissions = (('test', 'test111'), ('test2', 'test222'), ('Simpleui', 'simpleui')) def __str__(self): return self.name