From 988483a9bcdb420c9d0cbf3aea9111820b4d2760 Mon Sep 17 00:00:00 2001 From: Calum Andrew Morrell Date: Sun, 9 Nov 2025 21:00:21 +0000 Subject: [PATCH] Added model for news items. --- news/models.py | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/news/models.py b/news/models.py index a60e648..f29b123 100644 --- a/news/models.py +++ b/news/models.py @@ -1,3 +1,4 @@ +from django.contrib.auth import get_user_model from django.db import models from django.urls import reverse_lazy from django.utils.text import slugify @@ -16,10 +17,51 @@ class Category(models.Model): return super(Category, self).save() def get_absolute_url(self): - pass + return reverse_lazy("news:list_category", args=[self.slug]) def __str__(self): return self.title class Meta: ordering = ["title"] + + +class NewsItem(models.Model): + title = models.CharField(max_length=200) + slug = models.SlugField(max_length=200, unique=True) + category = models.ForeignKey( + Category, on_delete=models.PROTECT, related_name="news_items" + ) + body = MarkdownxField() + origin_link = models.URLField(blank=True, null=True) + origin_times_followed = models.PositiveIntegerField() + header_img = models.ImageField(blank=True, null=True) + tags = TagField( + force_lowercase=True, + get_absolute_url=lambda tag: reverse_lazy( + "news:list_tag", kwargs={"tag": tag.slug} + ), + ) + created_at = models.DateTimeField(auto_now_add=True) + is_published = models.BooleanField(default=False) + is_featured = models.BooleanField(default=False) + owner = models.ForeignKey( + get_user_model(), on_delete=models.CASCADE, related_name="news_items" + ) + + def save(self): + if not self.slug: + self.slug = slugify(self.title) + return super(NewsItem, self).save() + + def get_absolute_url(self): + return reverse_lazy("news:detail", args=[self.category.slug, self.slug]) + + def body_as_markdown(self): + return markdownify(self.body) + + def __str__(self): + return self.title + + class Meta: + ordering = ["-created_at"]