app引擎上django-nonrel的模型继承

时间:2011-03-02 03:29:08

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

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

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

编辑:发生在我身上的一种可能性是继续使用常规的django模型继承,根据需要将基本目标类设置为抽象并创建子模型,然后创建子实体,而不是尝试查询目标实体,创建具有ListField的每个用户的模型,该ListField包含对各个子类实体的引用并检索ListField。这看起来像是一种可行的选择吗?

1 个答案:

答案 0 :(得分:0)

您可以在ListField中使用djangotoolbox,它会使用新类型字段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__函数,以确保删除效果良好。