Added initial implementation of cascading document deletion.

The current implementation is still very basic and needs some polish.
The essence of it is that each Document gets a new meta attribute called
"delete_rules" that is a dictionary containing (documentclass,
fieldname) as key and the actual delete rule as a value.  (Possible
values are DO_NOTHING, NULLIFY, CASCADE and DENY.  Of those, only
CASCADE is currently implented.)
This commit is contained in:
Vincent Driessen
2010-12-05 08:08:55 -08:00
parent 4f3eacd72c
commit 86233bcdf5
4 changed files with 56 additions and 2 deletions

View File

@@ -190,6 +190,8 @@ class DocumentMetaclass(type):
new_class = super_new(cls, name, bases, attrs)
for field in new_class._fields.values():
field.owner_document = new_class
if hasattr(field, 'delete_rule') and field.delete_rule:
field.document_type._meta['delete_rules'][(new_class, field.name)] = field.delete_rule
module = attrs.get('__module__')
@@ -258,6 +260,7 @@ class TopLevelDocumentMetaclass(DocumentMetaclass):
'index_drop_dups': False,
'index_opts': {},
'queryset_class': QuerySet,
'delete_rules': {},
}
meta.update(base_meta)