4

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

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

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

4

1 回答 1

0

您可以在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__ 函数以确保删除工作正常。

于 2014-04-02T10:01:23.900 回答