http://docs.djangoproject.com/en/dev/topics/db/models/#intermediary-manytomanyに従ってこれを行うことをお勧めします
class Material(models.Model):
name = models.CharField(max_length=50)
class Compound(models.Model):
materials = models.ManyToManyField(Material, through='CompoundMaterials')
class CompoundMaterials(models.Model)
Material = models.ForeignKey(Material)
Compound = models.ForeignKey(Compound)
Quantity = models.IntegerField()
私はここで何をしているんだ?Django は通常、化合物を要素に関連付けるキーのペアを保持するための中間テーブルを自動的に生成します。この場合、私たちはそれを自分で定義していますが、それだけでなく、追加のデータを関係に追加しています。つまり、あなたが話している量です。
使用例として、次のようにします。
$ python manage.py shell
from project.app.models import *
oxygen = Material(name="oxygen")
hydrogen = Material(name="hydrogen")
water = Compound(name="water")
oxygen.save()
hydrogen.save()
water.save()
water_chemistry_oxygen = CompoundMaterials(Material=oxygen, Compound=Water, Quantity=1)
water_chemistry_hydrogen = CompoundMaterials(Material=hydrogen, Compound=Water, Quantity=2)
water_chemistry_oxygen.save()
water_chemistry_hydrogen.save()