From de64b432624eab96f5b1195295a3cfbe653fda49 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 6 Jun 2023 01:36:07 -0400 Subject: [PATCH] improve recast --- catalog/templates/_sidebar_edit.html | 37 +++++++++++++++++++--------- catalog/views.py | 16 ++++++++++-- 2 files changed, 39 insertions(+), 14 deletions(-) diff --git a/catalog/templates/_sidebar_edit.html b/catalog/templates/_sidebar_edit.html index 2869b488..660190a0 100644 --- a/catalog/templates/_sidebar_edit.html +++ b/catalog/templates/_sidebar_edit.html @@ -41,23 +41,36 @@ {% if item.class_name == "movie" or item.class_name == "tvshow" %}
{% trans '切换分类' %} -
- {% csrf_token %} - {% if item.class_name == "movie" %} + {% if item.class_name == "movie" %} + + {% csrf_token %} - {% endif %} - {% if item.class_name == "tvshow" %} - {% if item.all_seasons %} - ⛔️ 条目下有子项 - {% else %} +
+ {% elif item.class_name == "tvshow" %} + {% if item.all_seasons %} + ⛔️ 条目下有子项 + {% else %} +
+ {% csrf_token %} - {% endif %} +
{% endif %} - + {% if request.user.is_superuser %} +
+ {% csrf_token %} + + +
+ {% endif %} + {% endif %}
{% endif %} {% if item.class_name == "tvseason" %} diff --git a/catalog/views.py b/catalog/views.py index 069183dd..786f2510 100644 --- a/catalog/views.py +++ b/catalog/views.py @@ -229,9 +229,21 @@ def recast(request, item_path, item_uuid): raise BadRequest() item = get_object_or_404(Item, uid=get_uuid_or_404(item_uuid)) cls = request.POST.get("class") - model = TVShow if cls == "tvshow" else (Movie if cls == "movie" else None) + model = ( + TVShow + if cls == "tvshow" + else (Movie if cls == "movie" else (TVSeason if cls == "tvseason" else None)) + ) if not model: - raise BadRequest() + raise BadRequest("Invalid target") + if item.__class__ == model: + raise BadRequest("Same target") + _logger.warn(f"{request.user} recasting {item} to {model}") + if item.__class__ == TVShow: + for season in item.seasons.all(): + _logger.warn(f"{request.user} recast orphaning season {season}") + season.show = None + season.save(update_fields=["show"]) new_item = item.recast_to(model) return redirect(new_item.url)