Django如何仅提取指定字段 按Faculty分类展示关联Course数据
问题1:是否需要建立Many to One关联
需要,当前的一对一关联不符合现有业务逻辑,必须调整关联关系。
业务规则为「1名Faculty可开设多门Course,1门Course仅对应1名Faculty」,对应关系映射规则为:在Course模型中设置ManyToOne关联指向Faculty模型,同时可在Faculty模型中配置反向关联属性(如命名为courses,通过mappedBy绑定Course侧的关联字段)。配置完成后直接查询Faculty列表即可直接获取每个教师对应的所有课程数据,完全匹配按教师维度拆分展示的需求。
问题2:如何避免查询冗余字段
可通过两种通用方案实现仅查询所需的课程名称、教师名称字段:
- 调用ORM框架的指定字段查询能力:Django ORM可使用
only('name', 'faculty__name')方法,JPA可在JPQL中指定查询f.name, c.name,MyBatis可直接在SQL中仅声明查询faculty.name、course.name两个字段,避免拉取全表字段 - 优先从Faculty维度发起查询并开启关联预加载:查询Faculty列表时仅拉取教师名称字段,预加载关联的Course数据时也仅拉取课程名称字段,既规避了冗余字段查询,也能解决N+1查询的性能问题。
如果需要实现你给出的展示格式,模板渲染逻辑可参考如下示例:
{% for faculty in faculty_list %} {{ faculty.name }}: {% for course in faculty.courses %} -- {{ course.name }} {% endfor %} {% endfor %}
内容的提问来源于stack exchange,提问作者sixovov947
相关产品推荐
相关产品推荐

