cleanup tv seasons
This commit is contained in:
parent
a301aa78b7
commit
3bb677b68d
7 changed files with 70 additions and 44 deletions
|
@ -280,8 +280,12 @@ class Item(SoftDeleteMixin, PolymorphicModel):
|
|||
]
|
||||
|
||||
def clear(self):
|
||||
self.set_parent_item(None)
|
||||
self.primary_lookup_id_value = None
|
||||
self.primary_lookup_id_type = None
|
||||
for res in self.external_resources.all():
|
||||
res.item = None
|
||||
res.save()
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.__class__.__name__}|{self.id}|{self.uuid} {self.primary_lookup_id_type}:{self.primary_lookup_id_value if self.primary_lookup_id_value else ''} ({self.title})"
|
||||
|
@ -317,7 +321,8 @@ class Item(SoftDeleteMixin, PolymorphicModel):
|
|||
return list(self.child_items.values_list("id", flat=True))
|
||||
|
||||
def set_parent_item(self, value):
|
||||
raise ValueError("cannot set parent item")
|
||||
# raise ValueError("cannot set parent item")
|
||||
pass
|
||||
|
||||
@property
|
||||
def parent_uuid(self):
|
||||
|
|
|
@ -55,13 +55,11 @@
|
|||
{% elif item.class_name == "tvshow" %}
|
||||
{% if item.all_seasons %}<i>⛔️ 条目下已有子项</i>{% endif %}
|
||||
{% if not item.all_seasons or request.user.is_staff %}
|
||||
<form method="post"
|
||||
action="{% url 'catalog:recast' item.url_path item.uuid %}"
|
||||
onsubmit="return confirm('确认切换吗?');">
|
||||
{% comment %} <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 '更改为电影' %}">
|
||||
</form>
|
||||
</form> {% endcomment %}
|
||||
<form method="post"
|
||||
action="{% url 'catalog:recast' item.url_path item.uuid %}"
|
||||
onsubmit="return confirm('确认切换吗?');">
|
||||
|
@ -78,7 +76,7 @@
|
|||
<i>⛔️ 条目已被删除</i>
|
||||
{% elif item.merged_to_item and not request.user.is_staff %}
|
||||
<i>⛔️ 条目已被合并</i>
|
||||
{% elif item.journal_exist and not request.user.is_staff %}
|
||||
{% elif item.journal_exists and not request.user.is_staff %}
|
||||
<i>⛔️ 条目已被用户标记过</i>
|
||||
{% else %}
|
||||
{% if item.class_name == "tvseason" or item.class_name == "performanceproduction" %}
|
||||
|
@ -95,14 +93,24 @@
|
|||
value="{{ item.show.absolute_url }}"
|
||||
required>
|
||||
<br>
|
||||
<input class="contrast" type="submit" value="{% trans '关联' %}">
|
||||
<input class="contrast" type="submit" value="{% trans '更新关联' %}">
|
||||
</form>
|
||||
</details>
|
||||
{% endif %}
|
||||
{% elif item.class_name == "tvshow" %}
|
||||
<details>
|
||||
<summary>清理单季</summary>
|
||||
<form method="post"
|
||||
action="{% url 'catalog:remove_unused_seasons' item.url_path item.uuid %}"
|
||||
onsubmit="return confirm('本操作不可撤销。确认删除吗?');">
|
||||
{% csrf_token %}
|
||||
<input class="contrast" type="submit" value="{% trans '删除未被标记的单季' %}">
|
||||
</form>
|
||||
</details>
|
||||
{% endif %}
|
||||
<details>
|
||||
<summary>{% trans '合并到同类另一条目' %}</summary>
|
||||
{% if item.journal_exist %}<i>🚸 条目已被用户标记过</i>{% endif %}
|
||||
{% if item.journal_exists %}<i>🚸 条目已被用户标记过</i>{% endif %}
|
||||
<form method="post"
|
||||
action="{% url 'catalog:merge' item.url_path item.uuid %}"
|
||||
onsubmit="return confirm('本操作不可撤销。确认合并吗?');">
|
||||
|
|
|
@ -11,13 +11,6 @@
|
|||
{% load thumb %}
|
||||
<!-- class specific details -->
|
||||
{% block details %}
|
||||
<div>
|
||||
{% if item.imdb %}
|
||||
{% trans 'IMDb:' %}<a href="https://www.imdb.com/title/{{ item.imdb }}/"
|
||||
target="_blank"
|
||||
rel="noopener">{{ item.imdb }}</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div>
|
||||
{% if item.director %}
|
||||
{% trans '导演:' %}
|
||||
|
@ -30,13 +23,12 @@
|
|||
{% if item.director|length > 5 %}
|
||||
<a href="javascript:void(0);" id="directorMore">{% trans '更多' %}</a>
|
||||
<script>
|
||||
$("#directorMore").on('click', function (e) {
|
||||
$("span.director:not(:visible)").each(function (e) {
|
||||
$(this).parent().removeAttr('style');
|
||||
});
|
||||
$(this).remove();
|
||||
})
|
||||
|
||||
$("#directorMore").on('click', function (e) {
|
||||
$("span.director:not(:visible)").each(function (e) {
|
||||
$(this).parent().removeAttr('style');
|
||||
});
|
||||
$(this).remove();
|
||||
})
|
||||
</script>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
@ -154,6 +146,13 @@
|
|||
{% endfor %}
|
||||
{% endif %}
|
||||
</div>
|
||||
<div>
|
||||
{% if item.imdb %}
|
||||
{% trans 'IMDb:' %}<a href="https://www.imdb.com/title/{{ item.imdb }}/"
|
||||
target="_blank"
|
||||
rel="noopener">{{ item.imdb }}</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div>
|
||||
{% if item.site %}
|
||||
{% trans '网站:' %}
|
||||
|
|
|
@ -58,6 +58,13 @@ urlpatterns = [
|
|||
assign_parent,
|
||||
name="assign_parent",
|
||||
),
|
||||
re_path(
|
||||
r"^(?P<item_path>"
|
||||
+ _get_all_url_paths()
|
||||
+ ")/(?P<item_uuid>[A-Za-z0-9]{21,22})/remove_unused_seasons$",
|
||||
remove_unused_seasons,
|
||||
name="remove_unused_seasons",
|
||||
),
|
||||
re_path(
|
||||
r"^(?P<item_path>"
|
||||
+ _get_all_url_paths()
|
||||
|
|
|
@ -73,7 +73,7 @@ def retrieve(request, item_path, item_uuid):
|
|||
item_url = f"/{item_path}/{item_uuid}"
|
||||
if item.url != item_url:
|
||||
return redirect(item.url)
|
||||
skipcheck = request.GET.get("skipcheck", False) and request.user.is_staff
|
||||
skipcheck = request.GET.get("skipcheck", False) and request.user.is_authenticated
|
||||
if not skipcheck and item.merged_to_item:
|
||||
return redirect(item.merged_to_item.url)
|
||||
if not skipcheck and item.is_deleted:
|
||||
|
@ -122,6 +122,16 @@ def retrieve(request, item_path, item_uuid):
|
|||
)
|
||||
|
||||
|
||||
def episode_data(request, item_uuid):
|
||||
item = get_object_or_404(Item, uid=get_uuid_or_404(item_uuid))
|
||||
qs = item.episodes.all().order_by("-pub_date")
|
||||
if request.GET.get("last"):
|
||||
qs = qs.filter(pub_date__lt=request.GET.get("last"))
|
||||
return render(
|
||||
request, "podcast_episode_data.html", {"item": item, "episodes": qs[:5]}
|
||||
)
|
||||
|
||||
|
||||
def _add_error_map_detail(e):
|
||||
e.additonal_detail = []
|
||||
for f, v in e.as_data().items():
|
||||
|
@ -215,11 +225,8 @@ def delete(request, item_path, item_uuid):
|
|||
if request.method != "POST":
|
||||
raise BadRequest()
|
||||
item = get_object_or_404(Item, uid=get_uuid_or_404(item_uuid))
|
||||
if not request.user.is_staff and item.journal_exist:
|
||||
if not request.user.is_staff and item.journal_exists():
|
||||
raise PermissionDenied()
|
||||
for res in item.external_resources.all():
|
||||
res.item = None
|
||||
res.save()
|
||||
item.delete()
|
||||
return (
|
||||
redirect(item.url + "?skipcheck=1") if request.user.is_staff else redirect("/")
|
||||
|
@ -296,12 +303,23 @@ def assign_parent(request, item_path, item_uuid):
|
|||
return redirect(item.url)
|
||||
|
||||
|
||||
@login_required
|
||||
def remove_unused_seasons(request, item_path, item_uuid):
|
||||
if request.method != "POST":
|
||||
raise BadRequest()
|
||||
item = get_object_or_404(Item, uid=get_uuid_or_404(item_uuid))
|
||||
for s in item.seasons.all():
|
||||
if not s.journal_exists():
|
||||
s.delete()
|
||||
return redirect(item.url)
|
||||
|
||||
|
||||
@login_required
|
||||
def merge(request, item_path, item_uuid):
|
||||
if request.method != "POST":
|
||||
raise BadRequest()
|
||||
item = get_object_or_404(Item, uid=get_uuid_or_404(item_uuid))
|
||||
if not request.user.is_staff and item.journal_exist:
|
||||
if not request.user.is_staff and item.journal_exists():
|
||||
raise PermissionDenied()
|
||||
if request.POST.get("new_item_url"):
|
||||
new_item = Item.get_by_url(request.POST.get("new_item_url"))
|
||||
|
@ -323,16 +341,6 @@ def merge(request, item_path, item_uuid):
|
|||
return redirect(item.url)
|
||||
|
||||
|
||||
def episode_data(request, item_uuid):
|
||||
item = get_object_or_404(Item, uid=get_uuid_or_404(item_uuid))
|
||||
qs = item.episodes.all().order_by("-pub_date")
|
||||
if request.GET.get("last"):
|
||||
qs = qs.filter(pub_date__lt=request.GET.get("last"))
|
||||
return render(
|
||||
request, "podcast_episode_data.html", {"item": item, "episodes": qs[:5]}
|
||||
)
|
||||
|
||||
|
||||
@login_required
|
||||
def mark_list(request, item_path, item_uuid, following_only=False):
|
||||
item = get_object_or_404(Item, uid=get_uuid_or_404(item_uuid))
|
||||
|
@ -387,7 +395,7 @@ def comments(request, item_path, item_uuid):
|
|||
item = get_object_or_404(Item, uid=get_uuid_or_404(item_uuid))
|
||||
if not item:
|
||||
raise Http404()
|
||||
ids = list(item.child_item_ids) + [item.id]
|
||||
ids = item.child_item_ids + [item.id]
|
||||
queryset = Comment.objects.filter(item_id__in=ids).order_by("-created_time")
|
||||
queryset = queryset.filter(query_visible(request.user))
|
||||
before_time = request.GET.get("last")
|
||||
|
@ -408,7 +416,7 @@ def reviews(request, item_path, item_uuid):
|
|||
item = get_object_or_404(Item, uid=get_uuid_or_404(item_uuid))
|
||||
if not item:
|
||||
raise Http404()
|
||||
ids = list(item.child_item_ids) + [item.id]
|
||||
ids = item.child_item_ids + [item.id]
|
||||
queryset = Review.objects.filter(item_id__in=ids).order_by("-created_time")
|
||||
queryset = queryset.filter(query_visible(request.user))
|
||||
before_time = request.GET.get("last")
|
||||
|
|
|
@ -1296,4 +1296,4 @@ def journal_exists_for_item(item):
|
|||
return False
|
||||
|
||||
|
||||
Item.journal_exist = property(journal_exists_for_item)
|
||||
Item.journal_exists = journal_exists_for_item
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
dateparser
|
||||
mistune>=3.0.0
|
||||
mistune
|
||||
rq>=1.12.0
|
||||
django~=3.2.19
|
||||
django-auditlog
|
||||
|
@ -20,7 +20,6 @@ django-tz-detect
|
|||
django-bleach
|
||||
django-redis
|
||||
django-oauth-toolkit
|
||||
meilisearch
|
||||
easy-thumbnails
|
||||
lxml
|
||||
openpyxl
|
||||
|
@ -36,5 +35,5 @@ markdownify
|
|||
igdb-api-v4
|
||||
podcastparser
|
||||
listparser
|
||||
fontawesomefree~=6.4.0
|
||||
fontawesomefree
|
||||
discord.py
|
||||
|
|
Loading…
Add table
Reference in a new issue