improve recast

This commit is contained in:
Your Name 2023-06-06 01:36:07 -04:00 committed by Henri Dickson
parent 9811c3c370
commit de64b43262
2 changed files with 39 additions and 14 deletions

View file

@ -41,23 +41,36 @@
{% if item.class_name == "movie" or item.class_name == "tvshow" %}
<details>
<summary>{% trans '切换分类' %}</summary>
<form method="post"
action="{% url 'catalog:recast' item.url_path item.uuid %}"
onsubmit="return confirm('确认切换吗?');">
{% csrf_token %}
{% if item.class_name == "movie" %}
{% if item.class_name == "movie" %}
<form method="post"
action="{% url 'catalog:recast' item.url_path item.uuid %}"
onsubmit="return confirm('确认切换吗?');">
{% csrf_token %}
<input type="hidden" value="tvshow" name="class">
<input class="contrast" type="submit" value="{% trans '更改为剧集' %}">
{% endif %}
{% if item.class_name == "tvshow" %}
{% if item.all_seasons %}
<i>⛔️ 条目下有子项</i>
{% else %}
</form>
{% elif item.class_name == "tvshow" %}
{% if item.all_seasons %}
<i>⛔️ 条目下有子项</i>
{% else %}
<form method="post"
action="{% url 'catalog:recast' item.url_path item.uuid %}"
onsubmit="return confirm('确认切换吗?');">
{% csrf_token %}
<input type="hidden" value="movie" name="class">
<input class="contrast" type="submit" value="{% trans '更改为电影' %}">
{% endif %}
</form>
{% endif %}
</form>
{% if request.user.is_superuser %}
<form method="post"
action="{% url 'catalog:recast' item.url_path item.uuid %}"
onsubmit="return confirm('确认切换吗?');">
{% csrf_token %}
<input type="hidden" value="tvseason" name="class">
<input class="contrast" type="submit" value="{% trans '更改为单季' %}">
</form>
{% endif %}
{% endif %}
</details>
{% endif %}
{% if item.class_name == "tvseason" %}

View file

@ -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)