diff --git a/collection/models.py b/collection/models.py
index f5fe3204..fa1fd544 100644
--- a/collection/models.py
+++ b/collection/models.py
@@ -76,3 +76,17 @@ class CollectionItem(models.Model):
self.song = None
self.game = None
setattr(self, new_item.__class__.__name__.lower(), new_item)
+
+
+class CollectionMark(UserOwnedEntity):
+ collection = models.ForeignKey(
+ Collection, on_delete=models.CASCADE, related_name='collection_marks', null=True)
+
+ class Meta:
+ constraints = [
+ models.UniqueConstraint(
+ fields=['owner', 'collection'], name="unique_collection_mark")
+ ]
+
+ def __str__(self):
+ return f"CollectionMark({self.id} {self.owner} {self.collection})"
diff --git a/collection/templates/detail.html b/collection/templates/detail.html
index c47d0e91..12df4aee 100644
--- a/collection/templates/detail.html
+++ b/collection/templates/detail.html
@@ -93,6 +93,23 @@
+ {% if request.user != collection.owner %}
+
- {{ request.user.mastodon_username }}{% trans '的收藏单' %}
+ {{ title }}
diff --git a/collection/views.py b/collection/views.py
index 076a4dd3..b8f54483 100644
--- a/collection/views.py
+++ b/collection/views.py
@@ -152,8 +152,11 @@ def retrieve(request, id):
raise PermissionDenied()
form = CollectionForm(instance=collection)
- followers = []
if request.user.is_authenticated:
+ following = True if CollectionMark.objects.filter(owner=request.user, collection=collection).first() is not None else False
+ followers = []
+ else:
+ following = False
followers = []
return render(
@@ -164,7 +167,7 @@ def retrieve(request, id):
'form': form,
'editable': collection.is_editable_by(request.user),
'followers': followers,
-
+ 'following': following,
}
)
else:
@@ -219,28 +222,37 @@ def delete(request, id):
@login_required
def follow(request, id):
- pass
+ CollectionMark.objects.create(owner=request.user, collection=Collection.objects.get(id=id))
+ return redirect(reverse("collection:retrieve", args=[id]))
@login_required
def unfollow(request, id):
- pass
+ CollectionMark.objects.filter(owner=request.user, collection=Collection.objects.get(id=id)).delete()
+ return redirect(reverse("collection:retrieve", args=[id]))
@login_required
-def list(request, user_id=None):
+def list(request, user_id=None, marked=False):
if request.method == 'GET':
- queryset = Collection.objects.filter(owner=request.user if user_id is None else User.objects.get(id=user_id))
+ user = request.user if user_id is None else User.objects.get(id=user_id)
+ if marked:
+ title = user.mastodon_username + _('关注的收藏单')
+ queryset = Collection.objects.filter(pk__in=CollectionMark.objects.filter(owner=user).values_list('collection', flat=True))
+ else:
+ title = user.mastodon_username + _('创建的收藏单')
+ queryset = Collection.objects.filter(owner=user)
paginator = Paginator(queryset, REVIEW_PER_PAGE)
page_number = request.GET.get('page', default=1)
- reviews = paginator.get_page(page_number)
- reviews.pagination = PageLinksGenerator(
+ collections = paginator.get_page(page_number)
+ collections.pagination = PageLinksGenerator(
PAGE_LINK_NUMBER, page_number, paginator.num_pages)
return render(
request,
'list.html',
{
- 'collections': queryset,
+ 'collections': collections,
+ 'title': title,
}
)
else:
diff --git a/users/account.py b/users/account.py
index 6a908004..9cae3b58 100644
--- a/users/account.py
+++ b/users/account.py
@@ -38,7 +38,7 @@ from books.models import BookMark, BookReview
from movies.models import MovieMark, MovieReview
from games.models import GameMark, GameReview
from music.models import AlbumMark, SongMark, AlbumReview, SongReview
-from collection.models import Collection #, CollectionMark
+from collection.models import Collection, CollectionMark
from common.importers.goodreads import GoodreadsImporter
from common.importers.douban import DoubanImporter
@@ -233,7 +233,7 @@ def clear_data(request):
GameReview.objects.filter(owner=request.user).delete()
AlbumReview.objects.filter(owner=request.user).delete()
SongReview.objects.filter(owner=request.user).delete()
- # CollectionMark.objects.filter(owner=request.user).delete()
+ CollectionMark.objects.filter(owner=request.user).delete()
Collection.objects.filter(owner=request.user).delete()
request.user.first_name = request.user.username
request.user.last_name = request.user.mastodon_site
diff --git a/users/templates/users/home.html b/users/templates/users/home.html
index f6229162..1eed977a 100644
--- a/users/templates/users/home.html
+++ b/users/templates/users/home.html
@@ -563,6 +563,35 @@
+
+
+ {% trans '关注的收藏单' %}
+
+
+ {{ marked_collections_count }}
+
+ {% if marked_collections_more %}
+
{% trans '更多' %}
+ {% endif %}
+
+
+
+
{% if user == request.user %}
diff --git a/users/urls.py b/users/urls.py
index 7c5f57ff..b8bfe36c 100644
--- a/users/urls.py
+++ b/users/urls.py
@@ -31,6 +31,7 @@ urlpatterns = [
path('