1

データ モデリングについて考えるのに助けが必要です (私は python と mongoengine を使用しています)。オブジェクトが持つ別の属性に応じて、さまざまなクラスの埋め込みドキュメントを適用したいオブジェクトがあります。

class RunningSettings(EmbeddedDocument):
    max_distance = DecimalField()
    speed = DecimalField()
    ...

class WeightLiftingSettings(EmbeddedDocument):
    max_weight = DecimalField()
    reps = IntField()
    ...


class Workout(Document):
    name = StringField()
    description = StringField()
    date_created = DateTimeField(default=datetime.utcnow())
    kind = StringField()

    # pseudo starts
    <if self.kind == "running">
    settings = EmbeddedDocumentField('RunningSettings')

    <if self.kind == "weight_lifting">
    settings = EmbeddedDocumentField('WeightLiftingSettings')

私の問題は、オブジェクトを取得するたびに.save()、これがどのように機能するかがわからないことです。そもそも奇妙すぎる、または複雑すぎるのではないでしょうか? 私は提案を受け入れます。

4

1 に答える 1

0

これは、継承を使用するための良い候補のように思えます:

class RunningSettings(EmbeddedDocument):
    max_distance = DecimalField()
    speed = DecimalField()

class Workout(Document):
    name = StringField()
    description = StringField()
    date_created = DateTimeField(default=datetime.utcnow())
    meta = {'allow_inheritance': True}

class RunningWorkout(Document):
    settings = EmbeddedDocumentField(RunningSettings)

もう 1 つのオプションは、Workout のコンストラクターをオーバーライドし、そこで設定をインスタンス化することですが、エレガントではありません。

于 2016-06-01T20:22:14.363 に答える