Я бы предложил сделать это согласно 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()