Allow posting lists
authorRadek Czajka <rczajka@rczajka.pl>
Tue, 17 Mar 2026 11:35:30 +0000 (12:35 +0100)
committerRadek Czajka <rczajka@rczajka.pl>
Tue, 17 Mar 2026 11:35:30 +0000 (12:35 +0100)
src/social/api/views.py
src/social/migrations/0027_alter_userlistitem_order_and_more.py [new file with mode: 0644]
src/social/models.py

index 2ac1c93..2c23835 100644 (file)
@@ -191,7 +191,20 @@ class ListItemListViewV3(ListCreateAPIView):
 
     def get_queryset(self):
         lst = get_userlist(self.kwargs['slug'], self.request)
 
     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
 
 
 @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 (file)
index 0000000..08a4413
--- /dev/null
@@ -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),
+        ),
+    ]
index c8d0d10..45ee0f4 100644 (file)
@@ -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)
 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)
     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)
 
     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()
 
     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'):
     @classmethod
     def create_from_data(cls, user, data):
         if data.get('favorites'):