django模型中定一个字段为多对多,比如教师对班级。如果前端传进来的数据是CheckBox形式的,那如何在views中接收并赋值呢,又如何在模板中查询显示呢。来一起看一下。
前端传入时的形势
为checkbox设置相同的name,不同的value
{% for teacher in teachers %} {{ teacher.name }} {% endfor %}
views中接收
teachers = request.POST.getlist('teachers')the_class = YearClass( theGrade=theGrade, theClass=theClass, )the_class.save()the_class.teachers.add(*teachers)the_class.save()
重点在第一行和倒数第二行的解包。这里解释一下,由于django的规则,在给多对多字段赋值时,不要直接在创建对象的时候传入赋值,要把其它字段创建完并保存对象,确保对象已被创建后,再为该对象赋值多对多字段的数据。其实checkbox解包后得到的是一个列表。
在模板中查询多对多字段数据
先来看代码
{% for cls in year_classes %} {{ cls.theGrade }} {{ cls.theClass }} {% for foo in cls.teachers.all %} {{ foo.name }} {% endfor %} {% endfor %}
cls.teachers.all 这句是重点,对应字段进行.all操作即可获取。