reverse_delete_rule 有五个options,
* DO_NOTHING (0) - don't do anything (default).
* NULLIFY (1) - Updates the reference to null.
* CASCADE (2) - Deletes the documents associated with the reference.
* DENY (3) - Prevent the deletion of the reference object.
* PULL (4) - Pull the reference from a :class:`~mongoengine.fields.ListField` of references
源码注释
DO_NOTHING: 什么都不做,默认为该option
NULLIFY:如果被引用的对象被删除,该对象的引用字段清空
例如:如果学生,外关联了班级,如果班级删除,学生不会删除,但是学生数据的班级字段删除
CASCADE:被引用对象删除,则该对象也删除。 例如:学生关联了班级,如果班级删除,那么学生也删除。
用的较多
DENY:阻止删除。 如果对象有被引用,那么删除对象将报错,需要先删除引用的对象
PULL:被引用的对象删除之后,不会清空字段,用于列表字段里面的多个引用。例如:班级的学生字段是 ListField(ReferenceField(Student, reverse_delete_rule=PULL),如果删除某个学生,只会把列表里面的某个学生对象删除,比较实用
外关联用到较多的就是CASCADE,PULL