django-mptt / django-mptt

Utilities for implementing a modified pre-order traversal tree in django.
https://django-mptt.readthedocs.io/
Other
2.88k stars 467 forks source link

Bulk deletion of items does not update lft and rght fields #155

Closed jetli closed 10 years ago

jetli commented 12 years ago

I find some problem when delete items in django admin UI, steps to repro:

  1. in item list, select one or more items
  2. choose action "Delete selected xxx" from Action dropdown, and click Go button
  3. click "Yes I'm sure" button to delete items in "Are you sure?" confirmation page.
  4. go to database to see that lft and rght values are not updated at al for remaining items.

but if I go into one item, and try to delete the item from there, then there is no problem. my code :

class Area(MPTTModel):
    name = models.CharField(max_length = 200)
    slug = models.SlugField(max_length = 200)
    parent = TreeForeignKey('self', null = True, blank = True, related_name = 'children')

    def __unicode__(self):
        return self.name

    class MPTTMeta:
        order_insertion_by = ['name']

django : 1.3.1 mppt : 0.5 backend : mysql os : mac os x

craigds commented 12 years ago

Right, mptt doesn't currently do anything with queryset updates/deletes because arbitrary lots-of-rows mptt updates are difficult to solve efficiently. This is something I'd like to fix but haven't had the time to work on a patch.

The implementation of a fix is probably not simple. As a workaround, you could override the delete_selected action in the admin to do a full tree rebuild. That's not nice either but it'll keep the database consistent.

jetli commented 12 years ago

Thanks, Craig

floledermann commented 12 years ago

So why is this issue closed, then? As far as I undestand this is still an open issue in the current version...

floledermann commented 12 years ago

Btw. see http://stackoverflow.com/q/5591893/171579 for an example of how to disable / override the delete_selected action as a workaround.

craigds commented 12 years ago

Yes, it is still an issue, so fair enough

matthiask commented 10 years ago

For later reference.

Related issuse: https://github.com/feincms/feincms/issues/514

Adding disable_mptt_updates around the deletion: https://github.com/feincms/feincms/commit/c9b93c3637acaf396c78142d4e7c2b914e30a286

Replacing the default delete_selected action: https://github.com/feincms/feincms/blob/c9b93c3637acaf396c78142d4e7c2b914e30a286/feincms/admin/tree_editor.py#L554

matthiask commented 10 years ago

Patch: https://github.com/matthiask/django-mptt/commit/3f9aff60ceedbbfe8c17c223dcc40c35757d23d9

Travis: https://travis-ci.org/matthiask/django-mptt/builds/36764280