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

如何编写Django的views.py,用QuerySet筛选仅存在于Job模型的title

实现思路与代码示例

要找出仅存在于Job模型中、但未出现在EmployeeProfile模型里的title字段值,我们可以通过Django ORM的集合过滤来高效实现,具体步骤如下:

1. 编写视图函数(views.py)

首先导入所需模型,然后通过两步查询完成筛选:

  • 第一步:提取所有EmployeeProfile中的title并去重,转为集合(集合的成员检查效率远高于列表)
  • 第二步:用上述集合过滤Job模型,排除掉那些title已存在于员工档案中的职位
from django.shortcuts import render
from .models import Job, EmployeeProfile

def unique_job_titles(request):
    # 获取所有员工档案中存在的title,排除空值并去重
    existing_titles = set(
        EmployeeProfile.objects
        .exclude(title__isnull=True)
        .exclude(title='')
        .values_list('title', flat=True)
    )
    
    # 筛选出Job中不在existing_titles里的title,同样去重
    job_titles_only = Job.objects.exclude(title__in=existing_titles).values_list('title', flat=True).distinct()
    
    # 如果需要返回完整的Job对象(而不只是title字符串),可以用下面这行替代
    # jobs_only = Job.objects.exclude(title__in=existing_titles)
    
    context = {
        'job_titles_only': job_titles_only,
        # 若返回完整对象则传 'jobs_only': jobs_only
    }
    return render(request, 'job_templates/unique_titles.html', context)

2. 模板渲染示例(HTML)

假设你创建了名为unique_titles.html的模板,遍历结果的代码如下:

<h2>职位标题(仅存在于职位库,未出现在员工档案)</h2>
{% if job_titles_only %}
    <ul>
        {% for title in job_titles_only %}
            <li>{{ title }}</li>
        {% endfor %}
    </ul>
{% else %}
    <p>所有职位标题都已存在于员工档案中</p>
{% endif %}

关键细节说明

  • values_list('title', flat=True):提取指定字段的扁平列表,避免返回嵌套的元组
  • exclude(title__in=existing_titles):Django ORM的排除查询,精准过滤掉已存在的title
  • 额外的exclude(title__isnull=True)和exclude(title=''):避免空字符串或null值干扰过滤结果
  • .distinct():确保最终结果中每个title只出现一次,即使Job模型中有重复的职位标题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:51:43