from django.db import models from django.urls import reverse_lazy from django.utils.text import slugify class Category(models.Model): title = models.CharField(max_length=40, unique=True) slug = models.SlugField(max_length=40, unique=True) introduction = models.TextField(blank=True, null=True) parent = models.ForeignKey( "self", blank=True, null=True, on_delete=models.CASCADE, related_name="children" ) def save( self, force_insert=False, force_update=False, using=None, update_fields=None ): if not self.slug: self.slug = slugify(self.title) return super(Category, self).save() def get_absolute_url(self): return reverse_lazy("links:list_category", args=["self.slug"]) def __str__(self): return self.title class Meta: ordering = ["title"] class Link(models.Model): title = models.CharField(max_length=200, unique=True) website = models.URLField(unique=True) introduction = models.TextField(blank=True, null=True) category = models.ForeignKey( Category, on_delete=models.PROTECT, related_name="links" ) followed = models.PositiveIntegerField(default=0) created = models.DateTimeField(auto_now_add=True) is_published = models.BooleanField(default=False) def __str__(self): return self.title class Meta: ordering = ["category", "title"]