【问题标题】:Model inheritance in django-nonrel on app engine应用引擎上 django-nonrel 中的模型继承
【发布时间】:2011-07-06 23:48:41
【问题描述】:

在应用引擎的 webapp 框架上,我可以使用多模型来创建(例如)一个目标模型,然后使用多个子模型来表示不同类型的目标,这些目标具有不同的字段集,具体取决于它们的目标类型.这使我可以简单地查询目标实体并接收所有子类型。

有没有办法使用 django-nonrel 模型来复制它?简单的模型继承似乎不起作用,因为 django-nonrel 要求基类是抽象的。我错了,还是有其他方法可以达到我不知道的相同效果?

编辑:我想到的一种可能性是继续使用常规 django 模型继承,根据需要将基 Goal 类设置为抽象并创建子模型,然后不是尝试查询 Goal 实体,而是创建每个用户的模型都有一个 ListField,其中包含对各种子类实体的引用并检索 ListField。这似乎是一个可行的替代方案?

【问题讨论】:

    标签: django google-app-engine django-nonrel


    【解决方案1】:

    你可以在djangotoolbox中使用ListField,它会用新的类型字段ListField扩展django-nonrel,它就像Django中的一对多类型字段一样,你可以在字段中保存所有子实体使用 ListProperty。

    有一个关于如何使用 ListField 的有用文档:http://django-mongodb-engine.readthedocs.org/en/latest/topics/lists-and-dicts.html

    型号

    from djangotoolbox.fields import ListField
    
    class Post(models.Model):
        ...
        tags = ListField()
    

    用法

    >>> Post(tags=['django', 'mongodb'], ...).save()
    >>> Post.objecs.get(...).tags
    ['django', 'mongodb']
    

    通知

    对于功能,您最好保存 id 而不是外键,因为您将不同类型的对象保存到一个 ListField 字段中。并更好地重新实现 __del__ 函数以确保删除工作正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多