将标签分配给django模型

时间:2016-08-09 18:15:35

标签: python django

我在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中为每个问题分配标签的方式。

无论如何我可以在不使用外部应用程序/库的情况下实现此功能吗?

3 个答案:

答案 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成为ForiegnKeyJob

答案 2 :(得分:-1)

也许你会想看看这个django应用程序: django-tagging