diff --git a/feeds/migrations/0002_alter_author_options_alter_domain_options_and_more.py b/feeds/migrations/0002_alter_author_options_alter_domain_options_and_more.py new file mode 100644 index 0000000..db7e033 --- /dev/null +++ b/feeds/migrations/0002_alter_author_options_alter_domain_options_and_more.py @@ -0,0 +1,53 @@ +# Generated by Django 5.0.2 on 2024-02-23 05:27 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('feeds', '0001_initial'), + ] + + operations = [ + migrations.AlterModelOptions( + name='author', + options={'ordering': ['name'], 'verbose_name': 'Author', 'verbose_name_plural': 'Authors'}, + ), + migrations.AlterModelOptions( + name='domain', + options={'ordering': ['name'], 'verbose_name': 'Domain', 'verbose_name_plural': 'Domains'}, + ), + migrations.AlterModelOptions( + name='entry', + options={'ordering': ['-created_parsed'], 'verbose_name': 'Entry', 'verbose_name_plural': 'Entries'}, + ), + migrations.AlterModelOptions( + name='feed', + options={'ordering': ['-created_at'], 'verbose_name': 'Feed', 'verbose_name_plural': 'Feeds'}, + ), + migrations.AlterModelOptions( + name='generator', + options={'ordering': ['name'], 'verbose_name': 'Feed generator', 'verbose_name_plural': 'Feed generators'}, + ), + migrations.AlterModelOptions( + name='links', + options={'ordering': ['href'], 'verbose_name': 'Link', 'verbose_name_plural': 'Links'}, + ), + migrations.AlterModelOptions( + name='publisher', + options={'ordering': ['name'], 'verbose_name': 'Publisher', 'verbose_name_plural': 'Publishers'}, + ), + migrations.AlterUniqueTogether( + name='author', + unique_together={('name', 'email', 'href')}, + ), + migrations.AlterUniqueTogether( + name='links', + unique_together={('href', 'rel')}, + ), + migrations.AlterUniqueTogether( + name='publisher', + unique_together={('name', 'email', 'href')}, + ), + ] diff --git a/feeds/models.py b/feeds/models.py index b192236..8e5c929 100644 --- a/feeds/models.py +++ b/feeds/models.py @@ -22,6 +22,13 @@ class Domain(models.Model): hidden_at = models.DateTimeField(null=True, blank=True) hidden_reason = models.TextField(blank=True) + class Meta: + """Meta information for the domain model.""" + + ordering: typing.ClassVar[list[str]] = ["name"] # Example: Orders by name alphabetically + verbose_name: str = "Domain" + verbose_name_plural: str = "Domains" + def __str__(self) -> str: """Return string representation of the domain.""" if_hidden: Literal[" (hidden)", ""] = " (hidden)" if self.hidden else "" @@ -37,13 +44,21 @@ class Author(models.Model): href = models.TextField(blank=True) email = models.TextField(blank=True) + class Meta: + """Meta information for the author model.""" + + unique_together: typing.ClassVar[list[str]] = ["name", "email", "href"] + ordering: typing.ClassVar[list[str]] = ["name"] # Example: Orders by name alphabetically + verbose_name: str = "Author" + verbose_name_plural: str = "Authors" + def __str__(self) -> str: """Return string representation of the author.""" return f"{self.name} - {self.email} - {self.href}" class Generator(models.Model): - """A generator of a feed.""" + """What program or service generated the feed.""" created_at = models.DateTimeField(auto_now_add=True) modified_at = models.DateTimeField(auto_now=True) @@ -55,6 +70,9 @@ class Generator(models.Model): """Meta information for the generator model.""" unique_together: typing.ClassVar[list[str]] = ["name", "version", "href"] + ordering: typing.ClassVar[list[str]] = ["name"] # Example: Orders by name alphabetically + verbose_name: str = "Feed generator" + verbose_name_plural: str = "Feed generators" def __str__(self) -> str: """Return string representation of the generator.""" @@ -71,6 +89,14 @@ class Links(models.Model): href = models.TextField(blank=True) title = models.TextField(blank=True) + class Meta: + """Meta information for the links model.""" + + unique_together: typing.ClassVar[list[str]] = ["href", "rel"] + ordering: typing.ClassVar[list[str]] = ["href"] + verbose_name: str = "Link" + verbose_name_plural: str = "Links" + def __str__(self) -> str: """Return string representation of the links.""" return self.href @@ -85,6 +111,14 @@ class Publisher(models.Model): href = models.TextField(blank=True) email = models.TextField(blank=True) + class Meta: + """Meta information for the publisher model.""" + + unique_together: typing.ClassVar[list[str]] = ["name", "email", "href"] + ordering: typing.ClassVar[list[str]] = ["name"] + verbose_name: str = "Publisher" + verbose_name_plural: str = "Publishers" + def __str__(self) -> str: """Return string representation of the publisher.""" return self.name @@ -169,14 +203,17 @@ class Feed(models.Model): updated = models.TextField(blank=True) updated_parsed = models.DateTimeField(null=True, blank=True) + class Meta: + """Meta information for the feed model.""" + + ordering: typing.ClassVar[list[str]] = ["-created_at"] + verbose_name: str = "Feed" + verbose_name_plural: str = "Feeds" + def __str__(self) -> str: """Return string representation of the feed.""" return f"{self.domain} - {self.title}" - def get_fields(self) -> list: - """Return the fields of the feed.""" - return [(field.name, field.value_from_object(self)) for field in Feed._meta.fields] - class Entry(models.Model): """Each feed has multiple entries.""" @@ -225,10 +262,13 @@ class Entry(models.Model): updated = models.TextField(blank=True) updated_parsed = models.DateTimeField(null=True, blank=True) + class Meta: + """Meta information for the entry model.""" + + ordering: typing.ClassVar[list[str]] = ["-created_parsed"] + verbose_name: str = "Entry" + verbose_name_plural: str = "Entries" + def __str__(self) -> str: """Return string representation of the entry.""" return f"{self.feed} - {self.title}" - - def get_fields(self) -> list: - """Return the fields of the entry.""" - return [(field.name, field.value_from_object(self)) for field in Entry._meta.fields] diff --git a/templates/feed.html b/templates/feed.html index 6c233a2..04aad4c 100644 --- a/templates/feed.html +++ b/templates/feed.html @@ -1,27 +1,14 @@ {% extends "base.html" %} {% block content %}
{{ feed.description }}
{{ entry.summary }}
+