Django:ManyToManyField带有附加列

时间:2011-04-19 14:36:21

标签: sql django sqlite model manytomanyfield

我正在尝试使用Django创建一个作业申请表。

基本上,我创建了两个模型。

  • softwareskill_model
  • application_model

管理员可以登录admin-section并添加新的软件 - 数据库的条目。 application_model引用了那些 使用ManyToMany-Field的软件包条目/记录:

class softwareskill_model(django.db.models.Model):
    name = django.db.models.CharField(max_length=200)

class application_model(django.db.models.Model):
    # ...
    softwareskills = django.db.models.ManyToManyField(softwareskill_model)

因此,如果有人想申请这份工作,他可以​​选择哪一项 他使用的软件包。

现在我希望申请人为每个软件技能评分为1-6 他选择了。你是怎么做到的?

我正在使用SQLite3数据库并发现了ManyToManyField 创建一个新表来存储关系。就我而言,它看起来像 这样:

| ID | application_model_id | softwareskill_model_id |

我的假设是简单地添加一个新列,如下所示:

| ID | application_model_id | softwareskill_model_id | Rating |

这可能/最好的方法吗?怎么样?

我对Django,数据库和Web开发一般都很陌生并且很有希望 你可以帮帮我: - )!

谢谢你, 亨利

1 个答案:

答案 0 :(得分:2)

through是您需要使用的,例如

class softwareskill_model(django.db.models.Model):
    name = django.db.models.CharField(max_length=200)

class application_model(django.db.models.Model):
    # ...
    softwareskills = django.db.models.ManyToManyField(softwareskill_model, through="ApplicationSoftwareSkill")

class ApplicationSoftwareSkill(models.Model):
    softwareskill = models.ForeignKey(softwareskill_model)
    application = models.ForeignKey(application_model)
    # extra fields here e.g.
    rating = models.IntegerField()