2012-12-06 26 views
0

我有这个简单的模型:如何在本场景中使用MongoEngine级联删除?

from mongoengine import * 
from datetime import datetime 

class Person(Document): 
    firstname = StringField(required=True) 

    @property 
    def comments(self): 
     return Comment.objects(author=self).all() 

class Comment(Document): 
    text = StringField(required=True) 
    timestamp = DateTimeField(required=True, default=datetime.now()) 
    author = ReferenceField('Person', required=True, reverse_delete_rule=CASCADE) 

class Program(Document): 
    title = StringField(required=True) 
    comments = ListField(ReferenceField('Comment')) 

class Episode(Document): 
    title = StringField(required=True) 
    comments = ListField(ReferenceField('Comment')) 

正如你可以看到,这两个程序和情节可以有意见。起初,我试图嵌入评论,但我似乎碰到了一堵砖墙。所以我尝试将评论作为文档类来代替。我的问题是,我怎么模型,可以这样认为:

  1. 当一个人被删除,等等都是他们的意见
  2. 当注释(直接或间接)删除,它从其父删除
  3. 当一个程序或情节被删除,所以是评论的对象

我使用所有这一切的手动做MongoDB中(和SQLa,对于这个问题),但我是新来的MongoEngine和我挣扎了一下。任何帮助都是极好的!

回答

1

如果不编写应用程序代码来处理逻辑,并非所有这些都是可能的。我会写信号来处理一些边缘情况。

您所遇到的主要问题是全局更新/删除未处理 - 因此您必须确保使用api中写入的API,以确保数据库处于干净状态。