From 475a7f55a8d6fd4168b33bbf7d216d961c0d6d54 Mon Sep 17 00:00:00 2001 From: Radek Czajka Date: Tue, 17 Mar 2026 12:35:30 +0100 Subject: [PATCH] Allow posting lists --- src/social/api/views.py | 15 +++++++++++- .../0027_alter_userlistitem_order_and_more.py | 24 +++++++++++++++++++ src/social/models.py | 9 +++++-- 3 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 src/social/migrations/0027_alter_userlistitem_order_and_more.py diff --git a/src/social/api/views.py b/src/social/api/views.py index 2ac1c930f..2c2383591 100644 --- a/src/social/api/views.py +++ b/src/social/api/views.py @@ -191,7 +191,20 @@ class ListItemListViewV3(ListCreateAPIView): def get_queryset(self): lst = get_userlist(self.kwargs['slug'], self.request) - return lst.userlistitem_set.all() + return lst.userlistitem_set.all().order_by('order') + + def get_serializer(self, *args, **kwargs): + serializer_class = self.get_serializer_class() + kwargs.setdefault('context', self.get_serializer_context()) + + if isinstance(self.request.data, list): + kwargs['many'] = True + + return serializer_class(*args, **kwargs) + + def perform_create(self, serializer): + lst = get_userlist(self.kwargs['slug'], self.request) + serializer.save(list=lst) @never_cache diff --git a/src/social/migrations/0027_alter_userlistitem_order_and_more.py b/src/social/migrations/0027_alter_userlistitem_order_and_more.py new file mode 100644 index 000000000..08a4413cc --- /dev/null +++ b/src/social/migrations/0027_alter_userlistitem_order_and_more.py @@ -0,0 +1,24 @@ +# Generated by Django 4.0.8 on 2026-03-17 11:18 + +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('social', '0026_userprofile'), + ] + + operations = [ + migrations.AlterField( + model_name='userlistitem', + name='order', + field=models.IntegerField(default=0), + ), + migrations.AlterField( + model_name='userlistitem', + name='reported_timestamp', + field=models.DateTimeField(default=django.utils.timezone.now), + ), + ] diff --git a/src/social/models.py b/src/social/models.py index c8d0d1023..45ee0f4a6 100644 --- a/src/social/models.py +++ b/src/social/models.py @@ -418,11 +418,11 @@ class UserList(Syncable, models.Model): class UserListItem(Syncable, models.Model): list = models.ForeignKey(UserList, models.CASCADE) uuid = models.UUIDField(unique=True, default=uuid.uuid4, editable=False, blank=True) - order = models.IntegerField() + order = models.IntegerField(default=0) deleted = models.BooleanField(default=False) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) - reported_timestamp = models.DateTimeField() + reported_timestamp = models.DateTimeField(default=now) book = models.ForeignKey('catalogue.Book', models.SET_NULL, null=True, blank=True) fragment = models.ForeignKey('catalogue.Fragment', models.SET_NULL, null=True, blank=True) @@ -436,6 +436,11 @@ class UserListItem(Syncable, models.Model): objects = ActiveManager() all_objects = models.Manager() + def save(self, *args, **kwargs): + if not self.order: + self.order = self.list.userlistitem_set.all().count() + 1 + super().save(*args, **kwargs) + @classmethod def create_from_data(cls, user, data): if data.get('favorites'): -- 2.20.1