import uuid from django.db import models from django.urls import reverse class List(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) owner = models.ForeignKey( "lyric.User", related_name="lists", blank=True, null=True, on_delete=models.CASCADE, ) shared_with = models.ManyToManyField( "lyric.User", related_name="shared_lists", blank=True, ) @property def name(self): return self.item_set.first().text def get_absolute_url(self): return reverse("view_list", args=[self.id]) class Item(models.Model): text = models.TextField(default="") list = models.ForeignKey(List, default=None, on_delete=models.CASCADE) class Meta: ordering = ("id",) unique_together = ("list", "text") def __str__(self): return self.text class Applet(models.Model): slug = models.SlugField(unique=True) name = models.CharField(max_length=100) default_visible = models.BooleanField(default=True) grid_cols = models.PositiveSmallIntegerField(default=12) grid_rows = models.PositiveSmallIntegerField(default=3) def __str__(self): return self.name class UserApplet(models.Model): user = models.ForeignKey( "lyric.User", related_name="user_applets", on_delete=models.CASCADE, ) applet = models.ForeignKey( Applet, on_delete=models.CASCADE, ) visible = models.BooleanField(default=True) class Meta: unique_together = ("user", "applet")