X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/d6c0916e7ff6b39b641133fbc0da659457d890d9..11e13d02a963d55ba5e775ce85540441092684e5:/src/social/models.py?ds=sidebyside diff --git a/src/social/models.py b/src/social/models.py index c41a78f67..89fa65cd8 100644 --- a/src/social/models.py +++ b/src/social/models.py @@ -277,6 +277,11 @@ class Progress(Syncable, models.Model): return super().save(*args, **kwargs) +class ActiveManager(models.Manager): + def get_queryset(self): + return super().get_queryset().filter(deleted=False) + + class UserList(Syncable, models.Model): slug = models.SlugField(unique=True) user = models.ForeignKey(User, models.CASCADE) @@ -289,7 +294,10 @@ class UserList(Syncable, models.Model): reported_timestamp = models.DateTimeField() syncable_fields = ['name', 'public', 'deleted'] - + + objects = ActiveManager() + all_objects = models.Manager() + def get_absolute_url(self): return reverse( 'tagged_object_list', @@ -351,7 +359,7 @@ class UserList(Syncable, models.Model): # merge? lists = list(cls.objects.filter(user=user, favorites=True)) for l in lists[1:]: - t.userlistitem_set.all().update( + l.userlistitem_set.all().update( list=lists[0] ) l.delete() @@ -365,14 +373,23 @@ class UserList(Syncable, models.Model): return ls.userlistitem_set.filter(deleted=False, book=book).exists() def append(self, book): - # TODO: check for duplicates? n = now() - item = self.userlistitem_set.create( + items = self.userlistitem_set.filter( book=book, - order=(self.userlistitem_set.aggregate(m=models.Max('order'))['m'] or 0) + 1, - updated_at=n, - reported_timestamp=n, ) + if items.exists(): + items.update( + deleted=False, + reported_timestamp=n, + ) + item = items.first() + else: + item = self.userlistitem_set.create( + book=book, + order=(self.userlistitem_set.aggregate(m=models.Max('order'))['m'] or 0) + 1, + updated_at=n, + reported_timestamp=n, + ) book.update_popularity() return item