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)
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',
# 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()
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