Django当中models中的limit_choices_to
在models.Model中会遇到 limit_choices_to ,这个是什么意思呢?
在使用ModelForm渲染前端页面的时候,当model字段为ForeignKey的时候,会被渲染成select单选框, model字段为ManyToMany的时候会被渲染成多选select款。
当你在model中FK字段或者M2M字段中加上 limit_choices_to选项的时候,前端页面的渲染会根据你的限制条件来展示,这样就达到来限制用户选择的目的
1 class ClassList(models.Model): 2 """ 3 班级表 4 如: 5 Python全栈 面授班 5期 10000 2017-11-11 2018-5-11 6 """ 7 school = models.ForeignKey(verbose_name='校区', to='School',on_delete=models.CASCADE) 8 course = models.ForeignKey(verbose_name='课程名称', to='Course',on_delete=models.CASCADE) 9 semester = models.PositiveIntegerField(verbose_name="班级(期)") # PositiveIntegerField 正整数 10 price = models.PositiveIntegerField(verbose_name="学费") 11 start_date = models.DateField(verbose_name="开班日期") 12 graduate_date = models.DateField(verbose_name="结业日期", null=True, blank=True) 13 class_teacher = models.ForeignKey(verbose_name='班主任', to='UserInfo', related_name='classes',on_delete=models.CASCADE,limit_choices_to={'depart__title':'教质部'}) 14 tech_teachers = models.ManyToManyField(verbose_name='任课老师', to='UserInfo', related_name='teach_classes', blank=True,limit_choices_to={'depart__title__in': 15 ['Python教学部','Linux教学部']}) 16 memo = models.TextField(verbose_name='说明', blank=True, null=True) 17 18 def __str__(self): 19 return "{0}({1}期)".format(self.course.name, self.semester)
# 上述class_teacher中limit_choices_to={'depart__title':'教质部'},表明选择班主任只能在关联班主任的外键表depart中名称为教质部的数据;
# 同时tech_teachers中 limit_choices_to={'depart__title__in':['Python教学部','Linux教学部']},表明选择任课老师只能在关联任课老师的M2M表UserInfo中名称为Python教质部或Linux教学部的数据;