Mercurial > public > sg101
diff gpp/forums/views/main.py @ 235:d302c498560e
Fix problem when deleting multiple topics from a forum in bulk. We getting a list of topics from the database, then deleting each topic. But after you delete a topic, the forum.last_post on the remaining non-deleted topics can be stale. This was causing a weird DoesNotExist. Now just get the topics one at a time from the database.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Thu, 26 Aug 2010 04:01:58 +0000 |
parents | a46788862737 |
children | 307a74e28112 |
line wrap: on
line diff
--- a/gpp/forums/views/main.py Sun Aug 01 22:14:01 2010 +0000 +++ b/gpp/forums/views/main.py Thu Aug 26 04:01:58 2010 +0000 @@ -878,10 +878,19 @@ """ Deletes the list of topics. """ - topics = Topic.objects.filter(pk__in=topic_ids).select_related() - for topic in topics: - if topic.forum == forum: - _delete_topic(topic) + # Because we are deleting stuff, retrieve each topic one at a + # time since we are going to be adjusting de-normalized fields + # during deletes. In particular, we can't do this: + # topics = Topic.objects.filter(pk__in=topic_ids).select_related() + # for topic in topics: + # since topic.forum.last_post can go stale after a delete. + + for id in topic_ids: + try: + topic = Topic.objects.select_related().get(pk=id) + except Topic.DoesNotExist: + continue + _delete_topic(topic) def _bulk_move(topic_ids, old_forum, new_forum):