From 56d4f67a6f15190d2d16db450b3718f05fbcb009 Mon Sep 17 00:00:00 2001 From: Ihor Sokhan Date: Mon, 21 Jul 2025 16:49:58 +0300 Subject: [PATCH 1/2] field children deletion in admin --- admin/nodes/views.py | 8 +++++--- admin/templates/nodes/children.html | 25 ++++++++----------------- 2 files changed, 13 insertions(+), 20 deletions(-) diff --git a/admin/nodes/views.py b/admin/nodes/views.py index 71c3f60e965..bc24af625dd 100644 --- a/admin/nodes/views.py +++ b/admin/nodes/views.py @@ -14,7 +14,6 @@ View, FormView, ListView, - TemplateView, ) from django.shortcuts import redirect, reverse, get_object_or_404 from django.urls import reverse_lazy @@ -102,12 +101,15 @@ def get_context_data(self, **kwargs): node = self.get_object() detailed_duplicates = detect_duplicate_notifications(node_id=node.id) + children = node.get_nodes(is_node_link=False) + for child in children: + child.guid = child._id context.update({ 'SPAM_STATUS': SpamStatus, 'STORAGE_LIMITS': settings.StorageLimits, 'node': node, - 'children': node.get_nodes(is_node_link=False), + 'children': children, 'duplicates': detailed_duplicates }) @@ -194,7 +196,7 @@ def add_contributor_removed_log(self, node, user): ).save() -class NodeDeleteView(NodeMixin, TemplateView): +class NodeDeleteView(NodeMixin, View): """ Allows authorized users to mark nodes as deleted. """ template_name = 'nodes/remove_node.html' diff --git a/admin/templates/nodes/children.html b/admin/templates/nodes/children.html index 02f92a398ea..a24ba567c07 100644 --- a/admin/templates/nodes/children.html +++ b/admin/templates/nodes/children.html @@ -18,9 +18,7 @@ {% for child in children %} - - {{ child.id }} - + {{ child.guid }} {{ child.title }} {{ child.is_public }} @@ -29,26 +27,19 @@ {% if not child.is_registration %} {% if child.deleted %} -
+ {% csrf_token %}
{% else %} - - Delete Node - - +
+ {% csrf_token %} + +
{% endif %} {% endif %} From 84659f7e36c947d189233931e60fc5e0f427f437 Mon Sep 17 00:00:00 2001 From: Ihor Sokhan Date: Tue, 22 Jul 2025 14:05:57 +0300 Subject: [PATCH 2/2] improved performance and removed unused attributes --- admin/nodes/views.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/admin/nodes/views.py b/admin/nodes/views.py index bc24af625dd..74321c8f908 100644 --- a/admin/nodes/views.py +++ b/admin/nodes/views.py @@ -102,9 +102,10 @@ def get_context_data(self, **kwargs): detailed_duplicates = detect_duplicate_notifications(node_id=node.id) children = node.get_nodes(is_node_link=False) - for child in children: - child.guid = child._id - + # Annotate guid because django templates prohibit accessing attributes that start with underscores + children = AbstractNode.objects.filter( + id__in=[child.id for child in children] + ).prefetch_related('guids').annotate(guid=F('guids___id')) context.update({ 'SPAM_STATUS': SpamStatus, 'STORAGE_LIMITS': settings.StorageLimits, @@ -199,7 +200,6 @@ def add_contributor_removed_log(self, node, user): class NodeDeleteView(NodeMixin, View): """ Allows authorized users to mark nodes as deleted. """ - template_name = 'nodes/remove_node.html' permission_required = ('osf.view_node', 'osf.delete_node') raise_exception = True