Django views.py对比不同模型实现职位匹配页面无结果问题咨询
问题修复方案
核心问题梳理
- 未获取当前登录用户的
User_profile实例:直接对比模型类的字段属性而非当前用户的实际技能值,对比逻辑完全不生效 - 匹配逻辑错误:
- 用
==判断布尔值相等会把「用户和职位都不具备该技能」的情况判定为匹配,不符合需求 - 用
elif分支判断,单个职位即使匹配多个技能也只会被统计一次,且同技能下多个职位会被字典的相同key覆盖
- 用
- 上下文传递错误:直接将存储匹配结果的字典作为上下文传入模板,模板遍历字典时只会拿到键名(技能字符串),无法获取职位对象
- 模型字段缺失:
Job模型未定义created_at字段,模板调用该属性会报错
修复后的代码
views.py
from django.contrib.auth.decorators import login_required from apps.job.models import Job from apps.userprofile.models import User_profile @login_required # 要求用户登录才能访问该视图 def match_jobs(request): # 获取当前登录用户的个人资料实例 user_profile = request.user.userprofile match_jobs = [] # 列出所有需要匹配的技能字段 skill_fields = ['product_management', 'web_development', 'user_experience', 'marketing', 'finance'] for job in Job.objects.all(): # 判断职位是否有任意技能和用户的技能匹配(均为True) for field in skill_fields: if getattr(user_profile, field) and getattr(job, field): match_jobs.append(job) break # 避免同一个职位匹配多个技能时重复加入列表 # 正确传递上下文,键名和模板中遍历的变量名一致 return render(request, 'jobmatch.html', {'match_jobs': match_jobs})
Job.models.py 补充字段
class Job(models.Model): title = models.CharField(max_length=255) location = models.CharField(max_length=255, blank=True, null=True) description = models.TextField() requirements = models.TextField(blank=True, null=True) product_management = models.BooleanField(default=False) web_development = models.BooleanField(default=False) user_experience = models.BooleanField(default=False) marketing = models.BooleanField(default=False) finance = models.BooleanField(default=False) # 补充模板用到的创建时间字段 created_at = models.DateTimeField(auto_now_add=True)
jobmatch.html 无需改动,确保上下文传递正确即可正常渲染
内容的提问来源于stack exchange,提问作者dt123
相关产品推荐
相关产品推荐

