1. ホーム
  2. database

[解決済み] Django の ManyToMany リレーションシップと追加フィールド

2023-07-04 19:42:31

質問

自動的に作成されたManyToMany結合テーブルに、いくつかの追加情報を格納したいのですが。Djangoでどのようにそれを行うのでしょうか?

私の場合、2つのテーブルがあります: "Employees" と "Projects" です。私が保存したいのは、それぞれのプロジェクトで、それぞれの従業員が1時間の作業でいくら受け取るかということです、これらの値は同じではないので。では、どのようにすればいいのでしょうか?

私が思いついたのは、メソッド "ManyToManyField" の代わりに、これらの新しい情報を格納するために明示的に 3 番目のクラス/テーブルを作成し、メソッド "ForeignKey" を使用して "Employees" および "Projects" とその関係を設定することです。私はそれが動作することを確信していますが、これは最良のアプローチでしょうか?

どのように解決するのですか?

実現したいことの例です。

http://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationships

リンクが切れたときのために。

from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=128)

    def __str__(self):              # __unicode__ on Python 2
        return self.name

class Group(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField(Person, through='Membership')

    def __str__(self):              # __unicode__ on Python 2
        return self.name

class Membership(models.Model):
    person = models.ForeignKey(Person)
    group = models.ForeignKey(Group)
    date_joined = models.DateField()
    invite_reason = models.CharField(max_length=64)