From 41ed0314ad85b873b137dbba22912feae343609e Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 12 Jun 2022 11:29:05 -0400 Subject: [PATCH] show wish mark in timeline --- books/models.py | 4 ++++ collection/models.py | 8 ++++++++ collection/urls.py | 1 + collection/views.py | 11 ++++++++++- common/templatetags/neo.py | 9 +++++++-- games/models.py | 6 ++++-- movies/models.py | 7 +++++-- music/models.py | 8 ++++++++ timeline/templates/timeline.html | 2 +- timeline/templates/timeline_data.html | 4 ++++ 10 files changed, 52 insertions(+), 8 deletions(-) diff --git a/books/models.py b/books/models.py index 746ac1b6..c420aa2b 100644 --- a/books/models.py +++ b/books/models.py @@ -92,6 +92,10 @@ class Book(Entity): def get_absolute_url(self): return reverse("books:retrieve", args=[self.id]) + @property + def wish_url(self): + return reverse("books:wish", args=[self.id]) + def get_tags_manager(self): return self.book_tags diff --git a/collection/models.py b/collection/models.py index 9b8cf078..d079ec60 100644 --- a/collection/models.py +++ b/collection/models.py @@ -58,10 +58,18 @@ class Collection(UserOwnedEntity): def item(self): return self + @property + def mark_class(self): + return CollectionMark + @property def url(self): return settings.APP_WEBSITE + reverse("collection:retrieve", args=[self.id]) + @property + def wish_url(self): + return reverse("collection:wish", args=[self.id]) + def is_editable_by(self, viewer): if viewer.is_staff or viewer.is_superuser or viewer == self.owner: return True diff --git a/collection/urls.py b/collection/urls.py index 6264abeb..f3c62663 100644 --- a/collection/urls.py +++ b/collection/urls.py @@ -21,6 +21,7 @@ urlpatterns = [ path('with///', list_with, name='list_with'), path('add_to_list///', add_to_list, name='add_to_list'), path('share//', share, name='share'), + path('follow2//', wish, name='wish'), # TODO: tag ] diff --git a/collection/views.py b/collection/views.py index 622c81cd..d47d7be5 100644 --- a/collection/views.py +++ b/collection/views.py @@ -2,7 +2,7 @@ import logging from django.shortcuts import render, get_object_or_404, redirect, reverse from django.contrib.auth.decorators import login_required, permission_required from django.utils.translation import gettext_lazy as _ -from django.http import HttpResponseBadRequest, HttpResponseServerError +from django.http import HttpResponseBadRequest, HttpResponseServerError, HttpResponse from django.core.exceptions import ObjectDoesNotExist, PermissionDenied from django.db import IntegrityError, transaction from django.db.models import Count @@ -219,6 +219,15 @@ def delete(request, id): raise PermissionDenied() +@login_required +def wish(request, id): + try: + CollectionMark.objects.create(owner=request.user, collection=Collection.objects.get(id=id)) + except Exception: + pass + return HttpResponse("✔️") + + @login_required def follow(request, id): CollectionMark.objects.create(owner=request.user, collection=Collection.objects.get(id=id)) diff --git a/common/templatetags/neo.py b/common/templatetags/neo.py index 97209d4b..b915b7b9 100644 --- a/common/templatetags/neo.py +++ b/common/templatetags/neo.py @@ -1,6 +1,7 @@ from django import template import datetime from django.utils import timezone +from collection.models import Collection register = template.Library() @@ -8,8 +9,12 @@ register = template.Library() @register.simple_tag(takes_context=True) def current_user_marked_item(context, item): - if context['request'].user and context['request'].user.is_authenticated: - return context['request'].user.get_mark_for_item(item) + user = context['request'].user + if user and user.is_authenticated: + if isinstance(item, Collection) and item.owner == user: + return item + else: + return context['request'].user.get_mark_for_item(item) return None diff --git a/games/models.py b/games/models.py index c51e2981..3fa9568f 100644 --- a/games/models.py +++ b/games/models.py @@ -77,8 +77,6 @@ class Game(Entity): cover = models.ImageField(_("封面"), upload_to=game_cover_path, default=settings.DEFAULT_GAME_IMAGE, blank=True) - - def __str__(self): return self.title @@ -97,6 +95,10 @@ class Game(Entity): def get_absolute_url(self): return reverse("games:retrieve", args=[self.id]) + @property + def wish_url(self): + return reverse("games:wish", args=[self.id]) + def get_tags_manager(self): return self.game_tags diff --git a/movies/models.py b/movies/models.py index 70b4b7c6..db84563f 100644 --- a/movies/models.py +++ b/movies/models.py @@ -170,10 +170,9 @@ class Movie(Entity): ############################################ is_series = models.BooleanField(default=False) - def __str__(self): if self.year: - return self.title + f"({self.year})" + return self.title + f"({self.year})" else: return self.title @@ -197,6 +196,10 @@ class Movie(Entity): def get_absolute_url(self): return reverse("movies:retrieve", args=[self.id]) + @property + def wish_url(self): + return reverse("movies:wish", args=[self.id]) + def get_tags_manager(self): return self.movie_tags diff --git a/music/models.py b/music/models.py index 69644d3e..902a1599 100644 --- a/music/models.py +++ b/music/models.py @@ -76,6 +76,10 @@ class Album(Entity): def get_absolute_url(self): return reverse("music:retrieve_album", args=[self.id]) + @property + def wish_url(self): + return reverse("music:wish_album", args=[self.id]) + def get_tags_manager(self): return self.album_tags @@ -135,6 +139,10 @@ class Song(Entity): def get_absolute_url(self): return reverse("music:retrieve_song", args=[self.id]) + @property + def wish_url(self): + return reverse("music:wish_song", args=[self.id]) + def get_tags_manager(self): return self.song_tags diff --git a/timeline/templates/timeline.html b/timeline/templates/timeline.html index ffe3a41c..85adc7b7 100644 --- a/timeline/templates/timeline.html +++ b/timeline/templates/timeline.html @@ -12,7 +12,7 @@ - {{ site_name }} - 首页 + {{ site_name }} diff --git a/timeline/templates/timeline_data.html b/timeline/templates/timeline_data.html index 13a0e1e0..b3aa9eca 100644 --- a/timeline/templates/timeline_data.html +++ b/timeline/templates/timeline_data.html @@ -9,11 +9,15 @@ {% load neo %} {% for activity in activities %} +{% current_user_marked_item activity.target.item as marked %}
  • + {% if not marked %} + + {% endif %}