0

我正在尝试将人员、他们的技能和技能水平联系起来。我的模型如下所示:

class Person(models.Model):
    first_name = models.CharField(max_length=200)
    middle_name = models.CharField(max_length=200, blank=True)
    last_name = models.CharField(max_length=200)
    skills = models.ManyToManyField(Skill)

class Skill(models.Model):
    name = models.CharField(max_length=200)
    description = models.CharField(max_length=1000, blank=True)
    active = models.BooleanField(default=True)

它确实有效(在管理员中),我可以创建一个人,添加几个技能等。但是,我还需要与每个人相关的每个技能的技能级别信息。像这样的东西:

BASIC = 'BAS'
NOVICE = 'NOV'
INTERMEDIATE = 'INT'
ADVANCED = 'ADV'
EXPERT = 'EXP'

SKILL_LEVEL_CHOICES = (
    (BASIC, 'Basic knowledge'),
    (NOVICE, 'Novice (Limited experience)'),
    (INTERMEDIATE, 'Intermediate (Practical application)'),
    (ADVANCED, 'Advanced knowledge'),
    (EXPERT, 'Expert'),
)

我不确定我应该在 Person 中添加什么来获取每种技能及其级别的信息。

谢谢。

4

1 回答 1

0

在积累了更多关于 Django 的经验后,我意识到它为我的问题提供了非常简单的解决方案:)

我需要两个课程,SkillLevel 和 SkillWithSkillLevel。

class SkillLevel(models.Model):
    name = models.CharField(max_length=20)
    description = models.CharField(max_length=100, blank=True)

class SkillWithSkillLevel(models.Model):
    skill = models.ForeignKey(Skill)
    level = models.ForeignKey(SkillLevel)
    person = models.ForeignKey(Person)

而已。

有一点定制的管理员会有所帮助:

class SkillWithSkillLevelInline(admin.TabularInline):
    model = SkillWithSkillLevel
    extra = 3

然后,当然,在 PersonAdmin 中注册 SkillWithSkillLevelInline,inlines = [SkillWithSkillLevelInline]

人显然不需要skills = models.ManyToManyField(Skill)

于 2013-10-27T09:44:57.613 回答