私は現在、Django を使用して何かをモデル化する方法について冗談を言っています。chassis
基本的な状況は、 として機能し、いくつかの を提供するオブジェクトがあるということsockets
です。次に、のmodules
に配置されるさまざまな負荷があります。これらの異なるものを Django の個別のクラスとしてモデル化したいと思いますが、データベース層で共通のクラスを使用し、おそらくいくつかの汎用フィールドを使用します。sockets
chassis
modules
したがって、データベース モデルは次のようになります。
class Module(models.model):
name = models.CharField(max_length=128)
# Or is there a better way to annotate a type?
type = models.CharField(max_length=128)
string1 = models.CharField(max_length=128)
string2 = models.CharField(max_length=128)
...
int1 = models.IntegerField()
# Some kind of engine class that derives from Module
# but does nothing else then "mapping" the generic
# fields to something sensible
class Socket(models.Model):
is_on = models.ForeignKey(Chassis)
name = models.CharField(max_length=128)
type = models.CharField(max_length=128)
class Connection(models.Model):
chassis = models.ForeignKey(Chassis)
module = models.ForeignKey(Module)
via = models.ForeignKey(Socket)
class Chassis(models.Model):
name = models.CharField(max_length=128)
modules= models.ManyToManyField(Module, through='Connection')
class Group(models.Model):
name = models.CharField(max_length=128)
もちろん、この非正規化で論理を台無しにしたくはありません。engine
そのため、Module テーブルを使用する必要があるが、「Horsepower」などのデータを「int1」に効果的にマッピングする「論理」ゲッターとセッターを提供するある種のクラスを示唆しました。
したがって、私の質問は基本的に次のとおりです。
- 私がDjangoでやっていることは合理的ですか? または、これに対処するためのより良い(おそらく組み込みの)方法はありますか?
- フィールドに応じて、非正規化モデルのラッパーメソッドを提供する正しいタイプを
Module.type
自動的に構築することは可能でしょうか?