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的主要内容,如果未能解决你的问题,请参考以下文章
PHP MySQL X DevAPI Collection::existsInDatabase() 方法无法识别带有附加列的集合
django:如何正确加载带有 hash/md5 附加的静态文件?
Django 1.8.2(使用 Python 3.4):如何将带有选项的 CharField 存储在带有 ENUM 列的 MySQL 表中?