一、关于get_gender_display()得到元祖里面的数据
class StudyRecord(models.Model):
'''
学生记录
'''
course_record = models.ForeignKey(verbose_name="第几天课程", to="CourseRecord")
student = models.ForeignKey(verbose_name="学员", to='Student')
record_choices = (('checked', "已签到"),
('vacate', "请假"),
('late', "迟到"),
('noshow', "缺勤"),
('leave_early', "早退"),
)
record = models.CharField("上课纪录", choices=record_choices, default="checked", max_length=64)
score_choices = ((100, 'A+'),
(90, 'A'),
(85, 'B+'),
(80, 'B'),
(70, 'B-'),
(60, 'C+'),
(50, 'C'),
(40, 'C-'),
(0, ' D'),
(-1, 'N/A'),
(-100, 'COPY'),
(-1000, 'FAIL'),
)
score = models.IntegerField("本节成绩", choices=score_choices, default=-1)
homework_note = models.CharField(verbose_name='作业评语', max_length=255, blank=True, null=True)
note = models.CharField(verbose_name="备注", max_length=255, blank=True, null=True)
homework = models.FileField(verbose_name='作业文件', blank=True, null=True, default=None)
stu_memo = models.TextField(verbose_name='学员备注', blank=True, null=True)
date = models.DateTimeField(verbose_name='提交作业日期', auto_now_add=True)
def __str__(self):
return "{0}-{1}".format(self.course_record, self.student)
有时候我们创建的midels的表如上,存入数据库的是数字,需要展示的是元祖后面的信息,我们从数据库拿到的又是前面的信息,此时就需要用到 get_对应表格_display(),这样就可以得到元祖后面的数据了
class CusotmerConfig(ModelStark):
def display_gender(self,obj=None, header=False):
if header:
return "性别"
return obj.get_gender_display()
二、mark_safe 控制前端展示界面。就不需要前端的 |safe 了!
在使用之前需要引入库文件
from django.utils.safestring import mark_safe
class CusotmerConfig(ModelStark):
def display_gender(self,obj=None, header=False):
if header:
return "性别"
return obj.get_gender_display()
def display_course(self,obj=None,header=False):
if header:
return "咨询课程"
temp = []
for course in obj.course.all():
s = "<a href='/stark/crm/customer/cancel_course/%s/%s' style='border:1px solid #369;padding:3px 6px'><span>%s</span></a> " % (obj.pk, course.pk, course.name,)
temp.append(s)
return mark_safe("".join(temp))
之后直接return原始html代码,浏览器会自动渲染!
三、limit_choices_to
在model表单里有时候外键(多对多,一对多都可以)不需要外链表的搜有的值,只需要其中的几个,则可以通过limit_choices_to来提取,如下:
class Department(models.Model):
"""
部门表
市场部 1000
销售 1001
"""
title = models.CharField(verbose_name='部门名称', max_length=16)
code = models.IntegerField(verbose_name='部门编号', unique=True, null=False)
def __str__(self):
return self.title
#其他的表单里面
teachers = models.ManyToManyField(verbose_name='任课老师', to='UserInfo',related_name="abc",limit_choices_to={"depart__in":[1002,1005]})
teacher = models.ForeignKey(verbose_name="讲师", to='UserInfo',limit_choices_to={"depart_id__in":[1002,1003]})
consultant = models.ForeignKey(verbose_name="课程顾问", to="UserInfo", limit_choices_to={"depart_id": 1001})
这样在调用相应的数据时候就可以智取其中一部分了!