我在django网站上定义了Job模型,如下所示:
class Job(models.Model):
title = models.CharField(max_length=100)
description = models.TextField()
def __str__(self):
return self.title
工作所需的技能:
class SkillsGroup(models.Model):
group_name = models.CharField(max_length=150)
def __str__(self):
return self.group_name
class Skill(models.Model):
skill_group = models.ForeignKey(SkillsGroup)
name = models.CharField(max_length=200)
def __str__(self):
return self.skill_group.group_name + ' - ' + self.name
现在我的问题是如何为每个作业分配技能列表(如主题标签或...),以便每个用户都可以根据特定技能找到作业。 类似于在stackoverflow中为每个问题分配标签的方式。
无论如何我可以在不使用外部应用程序/库的情况下实现此功能吗?
答案 0 :(得分:1)
你需要ManyToManyField。我将简化你的例子。
class Job(models.Model):
title = models.CharField(max_length=100)
description = models.TextField()
skills = models.ManyToManyField(Skill)
def __str__(self):
return self.title
class Skill(models.Model):
name = models.CharField(max_length=100)
您现在可以像这样添加或删除所需的技能,但请确保Skill实例已保存在数据库中,或者在Job实例的“技能”属性中创建它:
job = Job.objects.get(title="My Vacancy")
# Create a new skill for my job offer
job.skills.create(name="Special Skill")
# Add an existing skill to my job offer
skill = Skill.objects.get(name="Another Special Skill")
job.skills.add(skill)
# I've changed my mind, I don't need the last skill to my vacancy
job.skills.remove(skill)
此字段也可以像Queryset一样:
# Check required skills for a job
skills = job.skills.all()
# Lets find some job with special skills
jobs = Job.objects.filter(skills__name__icontains="Special Skill")
https://docs.djangoproject.com/es/1.9/topics/db/examples/many_to_many/
答案 1 :(得分:-1)
听起来您希望Skill
成为ForiegnKey
到Job
。
答案 2 :(得分:-1)
也许你会想看看这个django应用程序: django-tagging