Django:带有附加列的 ManyToManyField

Posted

技术标签:

【中文标题】Django:带有附加列的 ManyToManyField【英文标题】:Django: ManyToManyField with additional Column 【发布时间】: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 开发非常陌生,希望 你可以帮助我:-)!

谢谢你, 亨利

【问题讨论】:

【参考方案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()

【讨论】:

以上是关于Django:带有附加列的 ManyToManyField的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL 调用函数返回带有表和附加列的记录集

多维数据集设计 - 带有附加列的多对多映射的桥接表

PHP MySQL X DevAPI Collection::existsInDatabase() 方法无法识别带有附加列的集合

django:如何正确加载带有 hash/md5 附加的静态文件?

带有附加参数的 Django 自定义模型方法

Django 1.8.2(使用 Python 3.4):如何将带有选项的 CharField 存储在带有 ENUM 列的 MySQL 表中?