You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django外键关联模型筛选:如何在模板中按类别展示对应入学要求

Django外键关联模型按类别筛选展示解决方案

1. 模型外键配置确认

首先确保AdmissionRequirement的外键字段定义符合预期,示例配置如下:

# models.py
from django.db import models

class AdmissionStudent(models.Model):
    studentlabel = models.CharField(max_length=50, verbose_name="学生类别")
    # 其余字段省略

class AdmissionRequirement(models.Model):
    requirementstudent = models.ForeignKey(
        AdmissionStudent,
        on_delete=models.CASCADE,
        related_name="requirements", # 自定义反向关联名,后续模板查询用
        verbose_name="所属学生类别"
    )
    requirement_content = models.TextField(verbose_name="入学要求内容")
    # 其余字段省略

如果未设置related_name参数,Django默认生成的反向关联名为admissionrequirement_set。

2. 视图层传参优化

无需单独传入全量AdmissionRequirement数据,通过AdmissionStudent的反向关联即可查询对应要求,为优化查询性能建议使用prefetch_related提前加载关联数据:

# views.py
from django.shortcuts import render
from .models import AdmissionStudent

def admission_view(request):
    # 预加载关联的入学要求数据,减少N+1查询问题
    student_categories = AdmissionStudent.objects.all().prefetch_related("requirements")
    return render(request, "Admission.html", {"student_categories": student_categories})

3. 模板层正确实现逻辑

遍历学生类别后通过反向关联读取对应入学要求即可实现匹配效果:

<!-- Admission.html -->
{% for category in student_categories %}
<div class="student-category">
    <h2>{{ category.studentlabel }}</h2>
    <ul class="requirement-list">
        {% for req in category.requirements.all %}
        <li>{{ req.requirement_content }}</li>
        {% empty %}
        <li>暂未公布该类别的入学要求</li>
        {% endfor %}
    </ul>
</div>
{% endfor %}

如果坚持使用已传入的全量AdmissionRequirement数据做筛选,可使用条件判断匹配:

<!-- 仅适用于已传入all_requirements参数的场景 -->
{% for category in student_categories %}
<div class="student-category">
    <h2>{{ category.studentlabel }}</h2>
    <ul class="requirement-list">
        {% for req in all_requirements %}
        {% if req.requirementstudent.id == category.id %}
        <li>{{ req.requirement_content }}</li>
        {% endif %}
        {% empty %}
        <li>暂未公布该类别的入学要求</li>
        {% endfor %}
    </ul>
</div>
{% endfor %}

内容的提问来源于stack exchange,提问作者Flababu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 13:57:02