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 Product(BaseModel): """ 商品 """ name = models.CharField(max_length=100, verbose_name=('商品名称')) category = fields.ForeignKey(ProductCategory, null=True, blank=True, verbose_name=('商品品类'), on_delete=models.CASCADE) desc = UETextField(null=True, blank=True, verbose_name=('商品详情')) hot = SwitchField(default=False, verbose_name='热门') def __str__(self): return self.name class Meta: verbose_name = ('商品') verbose_name_plural = verbose_name
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 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