我对使用“很多”字段是陌生的,我真的找不到一个很好的示例来说明如何继续执行此任务。
我目前有两个模型modelJob
和modelSkillSubscription
,现在modelJob
包含技能领域的“众筹”领域。
我想做的是
如果modelSkillSubscription
包含我获得的任何技能,请检索。说modelJob
包含[SkillA,SkillB,SkillC]。我想将其传递给过滤器,并从列表中获取所有包含modelSkillSubscription
的技能,避免重复。
class modelJob(models.Model):
skills = models.ManyToManyField(modelSkill,blank=True)
class modelSkillSubscription(models.Model):
employer = models.ForeignKey(modelEmployer, on_delete=models.CASCADE, default=None, blank=True)
skills = models.ManyToManyField(modelSkill, blank=True)
关于如何实现此目标的任何建议?
答案 0 :(得分:0)
您可以根据现有的SkillSubscription
实例过滤Job
模型(我将删除开头的model
,从而使模型名称更短并与Python“ CamelCase”类命名兼容惯例):
job = Job.objects.get(id=1)
subscriptions = (SkillSubscription.objects
.filter(skills__in=job.skills.all())
.distinct()
)
这将选择所有与工作至少具有一项共同技能的订阅。
如果您知道过滤条件,还可以将作业选择包装在同一查询中:
subscriptions = (SkillSubscription.objects
.filter(skills__in=Job.objects.filter(
# your filter criteria
)
.values('skills'))
.distinct()
)