我正在尝试将人员,他们的技能和技能水平联系起来。我的模型看起来像这样:
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添加什么来获取每项技能及其级别的信息。
感谢。
答案 0 :(得分: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)
。