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)

另一种选择是覆盖 Workout 的构造函数并在那里实例化设置,但它不太优雅。

于 2016-06-01T20:22:14.363 回答