0

私はDjangoで混合物を表現しようとしています。何かのようなもの:

Chemical #1 - 50%
Chemical #2 - 30%
Chemical #3 - 20%

次のように、compositionというラッパーを使用すると思いました。

class Composition(models.Model):
    """ Just a Wrapper """
    def save(...):
        #Validate ingredients add up to 100% and such


class Ingredient(models.Model):
    composition = models.ForeignKey('Composition',related_name='ingredients')
    name = models.CharField(max_length = 10)
    percentage = models.IntegerField()

これを行うためのより良い方法があると確信しています。後でDjango管理者でインラインを使用できるように、このように実行していることに注意してください。何をお勧めしますか?どうもありがとう=)

4

1 に答える 1

3

毎回材料の名前を入力するよりも、材料のリストを保持してから、構成を作成するときにそれらを参照する方が望ましいように思えます。次のように、多対多の関係とスルーテーブルを使用してそれを行うことができます。

class Ingredient(models.Model):
    name = models.CharField(max_length=10)

class Composition(models.Model):
    name = models.CharField(max_length=255)
    ingredients = models.ManyToManyField(Ingredient, through='CompositionIngredient')

    def save(...):
        #Validate ingredients add up to 100% and such

class CompositionIngredient(models.Model):
    composition = models.ForeignKey(Composition)
    ingredient = models.ForeignKey(Ingredient)
    proportion = models.DecimalField()

詳細については、Djangoのドキュメントを参照してください。

編集:これは、管理インターフェースのテーブルを介して処理する方法に関するドキュメントです。

于 2011-11-22T23:15:27.937 に答える