【问题标题】:Different default values for Model siblings Google App Engine模型同级 Google App Engine 的不同默认值
【发布时间】:2012-11-22 05:05:05
【问题描述】:

我正在为我的网站使用继承的建模架构,它的每个媒体元素都在一个通用 PolyModel 基础下,每个不同的元素本身如下所示:

class STSeasonMedia(polymodel.PolyModel):
    season = db.ReferenceProperty(STSeason,collection_name='related_media')
    description = db.StringProperty()
    visible = db.BooleanProperty(default=True)
    priority = db.IntegerProperty(default=10)

所以我希望“继承”模型有一些其他字段,但也有不同的默认值,例如:

class STVideo(STSeasonMedia):
    video_id = db.StringProperty()
    provider = db.StringProperty()
        priority = db.IntegerProperty(default = 100)

class STThumb(STSeasonMedia):
    picture = db.ReferenceProperty(STPicture,collection_name='thumbs')
    url = db.StringProperty()
    size = db.StringProperty()

class STNote(STSeasonMedia):
    content = db.TextProperty()
    visible = db.BooleanProperty(default=False)
    priority = db.IntegerProperty(default = 1)

有没有办法设置这个不同的默认值,它们可能会在之后改变,但一开始必须通过这些值。有什么想法吗?

【问题讨论】:

  • 您是否尝试过您显示的代码?如果没有,是否会引发某种异常?
  • 是的,确实如此!这就是我试图寻找有效替代方案的原因。
  • 能否在问题中包含异常回溯?我不确定它是否有助于在这种情况下找到答案,但这通常是一个好主意,就像一般原则一样。

标签: python google-app-engine model


【解决方案1】:

我认为您最好的解决方案可能是为您的派生模型提供__init__ 方法。如果用户没有提供任何属性,它可以为某些属性提供修改的默认值。

例如,您的 STVideo 类需要不同的默认 priority 应该能够使用这个:

def __init__(self, priority=100, **kwargs):
    super(STVideo, self).__init__(priority=priority, **kwargs)

【讨论】:

    猜你喜欢
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多