【问题标题】:Django: ManyToManyField with additional ColumnDjango:带有附加列的 ManyToManyField
【发布时间】:2011-08-08 18:06:34
【问题描述】:

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

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

  • softwareskill_model
  • application_model

管理员可以登录到管理部分并添加新的软件技能- 到数据库的条目。 application_model 引用了那些 使用多对多字段的软件技能条目/记录:

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 开发非常陌生,希望 你可以帮助我:-)!

谢谢你, 亨利

【问题讨论】:

    标签: sql django sqlite model manytomanyfield


    【解决方案1】:

    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()
    

    【讨论】:

      猜你喜欢
      • 2011-05-19
      • 1970-01-01
      • 2019-06-26
      • 2011-08-25
      • 1970-01-01
      • 2020-02-02
      • 2017-12-16
      • 2018-07-13
      • 1970-01-01
      相关资源
      最近更新 更多