我正在尝试建立求职者匹配系统。
我想按工作所需的关键技能过滤候选人。 每个候选人都有多种技能。 每个工作都有多个"必需"的工作技能,这是一个也包含技能重要性的模型。
我想过滤我的候选人,只让候选人具备工作所需的所有关键技能。 关键技能定义为重要性 = 3 的工作技能。
对于给定的工作"job_1",我想获得以下相关候选人:
critical_skills = job_1.required_skills.filter(importance=3)
relevant_candidates = Candidate.objects.filter('candidate how has all the critical_skills)
models.py:
class Skill(models.Model):
title = models.CharField(max_length=100, blank=False, unique=True)
class JobSkill(models.Model):
skill = models.ForeignKey(Skill, on_delete=models.CASCADE)
class Importance(models.IntegerChoices):
HIGH = 3
MEDIUM = 2
LOW = 1
importance = models.IntegerField(choices=Importance.choices)
class Job(models.Model):
title = models.CharField(max_length=100, null=False)
required_skills = models.ManyToManyField(JobSkill, blank=True)
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
class Candidate(models.Model):
title = models.CharField(max_length=100, blank=False, null=False)
full_name = models.CharField(max_length=100, blank=False, null=False)
skills = models.ManyToManyField(Skill, blank=True)
我将不胜感激任何帮助!!
谢谢
您可以按照跨越多值关系简单地链接筛选器,当在筛选器中跨越多值关系时,我们会使用每个筛选器限制相关模型。因此,您可以执行以下操作:
relevant_candidates = Candidate.objects.all()
for job_skill in critical_skills:
relevant_candidates = relevant_candidates.filter(skills__id=job_skill.skill_id)
注意:随着关键技能数量的增加,这将使越来越多的联接,从而导致查询变得更加复杂 结果会很慢。
注意:与其使用表
ManyToManyField
,不如JobSkill
表只有一个外键Skill
和一个字段importance
你应该简单地与Skill
ManyToManyField
并具有自定义的直通模型,该模型将具有两者的外键Job
和Skill
和现场importance
.请参阅上的额外字段 多对多 关系