2017-01-30 11 views
1

問題:数人のグループが異なるタイプの機器を使用できますが、同じタイプの機器は区別できません。例えば、グループは3つのハンマーと4つの軸を使用できますが、個々の軸やハンマーを区別する必要はありません。 UPD:ある日、私たちは今考えることのできない別の楽器の種類を使うことができました。Djangoモデルで辞書のようなフィールドを実装する方法は?

この場合のDjangoモデルの設計方法は?

私の考え:

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

class Group(models.Model): 
    title = models.CharField() 
    members = models.ForeignKey(Person) 
    equip = ??? 

私はthis question on StackExchangecode snippet for a Django Dictionary modelを見つけたが、私はまだ選択するどのようなアプローチを確認していません。 さらに、辞書にはdjango-jsonfielddjango-picklefieldがあります。

また、ここには本当に辞書が必要ですか?

+0

まず、これが適切なアプローチかどうかを判断する必要があります。データベースの正規化はおそらく良い考えです。 – e4c5

+0

私はあなたのコメントを理解しているか分かりません。個々の軸を区別すると、DBを正規化できます。しかし私はしません、私は報告書を記入するために誰かに尋ねるとき、彼は "私たちは2軸と3ハンマーを使用した"と報告し、これはまさに私が保存したい情報です。 //私が見る別のアプローチは、利用可能な計測器タイプのセットを一定にすることです。しかし、ある日、私たちは今考えることのできない別のツールを使うことができました。 –

+1

本当に必要なのは 'tool | job | number_used'のようなテーブルです – e4c5

答えて

1

あなたには、グループに関連する人物がいます。特定のジョブに人のグループを割り当て、ジョブ、機器の種類、およびその数で機器を追跡します。

class Group(models.Model): 
    title = models.CharField() 

class Person(models.Model): 
    name = models.CharField() 
    group = models.ForeignKey(Group) 

class Job(models.Model) 
    name = models.CharField() 
    group = models.ForeignKey(Group) 

class EquipmentUsage(models.Model) 
    job = models.ForeignKey(Job) 
    equip_name = models.CharField() 
    count = models.IntegerField() 
+0

ありがとうございます。あなたの答えとe4c5からのコメントは私の問題を解決しました。 –

関連する問題