Allow nested collections
This commit is contained in:
+9
-3
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user