Allow nested collections

This commit is contained in:
rucki
2026-08-30 18:47:35 +02:00
parent d5917d411a
commit 5793283653
9 changed files with 202 additions and 25 deletions
+9 -3
View File
@@ -222,7 +222,8 @@ class Collection(models.Model):
class CollectionSection(models.Model):
collection = models.ForeignKey(Collection, on_delete=models.CASCADE, related_name='sections')
item = models.ForeignKey(Item, on_delete=models.PROTECT, related_name='collection_sections')
item = models.ForeignKey(Item, on_delete=models.PROTECT, blank=True, null=True, related_name='collection_sections')
sub_collection = models.ForeignKey(Collection, on_delete=models.PROTECT, blank=True, null=True, related_name='containing_sections')
title = models.CharField(max_length=200, blank=True)
position = models.PositiveIntegerField(default=0)
created_at = models.DateTimeField(auto_now_add=True)
@@ -230,12 +231,17 @@ class CollectionSection(models.Model):
class Meta:
ordering = ['position', 'id']
constraints = [
models.UniqueConstraint(fields=['collection', 'item'], name='unique_collection_item'),
models.CheckConstraint(
check=(models.Q(item__isnull=False, sub_collection__isnull=True) | models.Q(item__isnull=True, sub_collection__isnull=False)),
name='collection_section_exactly_one_target',
),
models.UniqueConstraint(fields=['collection', 'item'], condition=models.Q(item__isnull=False), name='unique_collection_item'),
models.UniqueConstraint(fields=['collection', 'sub_collection'], condition=models.Q(sub_collection__isnull=False), name='unique_collection_sub_collection'),
models.UniqueConstraint(fields=['collection', 'position'], name='unique_collection_position'),
]
def __str__(self):
return f'{self.collection}: {self.title or self.item}'
return f'{self.collection}: {self.title or self.item or self.sub_collection}'
class UserPreference(models.Model):