在models中,字段參數limit_choices_to的用法
在使用ModelForm渲染前端頁面的時候,當model字段為ForeignKey的時候,會被渲染成select單選框, model字段為ManyToMany的時候會被渲染成多選select款。
當你在model中FK字段或者M2M字段中加上 limit_choices_to選項的時候,前端頁面的渲染會根據你的限制條件來展示,這樣就達到來限制用戶選擇的目的
class ClassList(models.Model): """ 班級表 """ school = models.ForeignKey(verbose_name='校區', to='School', on_delete=models.CASCADE) course = models.ForeignKey(verbose_name='課程名稱', to='Course', on_delete=models.CASCADE) semester = models.PositiveIntegerField(verbose_name='班級(期)') price = models.PositiveIntegerField(verbose_name='學費') start_date = models.DateField(verbose_name='開班日期') graduate_date = models.DateField(verbose_name='結業日期', null=True, blank=True) class_teacher = models.ForeignKey(verbose_name='班主任', to='UserInfo', related_name='classes', on_delete=models.CASCADE, limit_choices_to={'depart__title': '教質部'}) tech_teachers = models.ManyToManyField(verbose_name='任課老師', to='UserInfo', related_name='teach_classes', limit_choices_to={'depart__title__in': ['Python教學部', 'Linux教學部']}) memo = models.TextField(verbose_name='說明', null=True, blank=True)
從上面的model字段可以看出, class_teacher字段限制了選擇條件:{'depart__title': '教質部'}, 即在選擇班主任的時候,只能選擇關聯班主任的外鍵表depart中名稱為教質部的數據
ManyToMany字段的limit_choices_to指向了 {'depart__title__in':['xx','xx']} 一個列表,那在前端中只能選擇這個列表中的數據