Add Meta to models

This commit is contained in:
Joakim Hellsén 2024-02-23 06:28:11 +01:00
commit 06964a5761
3 changed files with 109 additions and 29 deletions

View file

@ -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')},
),
]

View file

@ -22,6 +22,13 @@ class Domain(models.Model):
hidden_at = models.DateTimeField(null=True, blank=True) hidden_at = models.DateTimeField(null=True, blank=True)
hidden_reason = models.TextField(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: def __str__(self) -> str:
"""Return string representation of the domain.""" """Return string representation of the domain."""
if_hidden: Literal[" (hidden)", ""] = " (hidden)" if self.hidden else "" if_hidden: Literal[" (hidden)", ""] = " (hidden)" if self.hidden else ""
@ -37,13 +44,21 @@ class Author(models.Model):
href = models.TextField(blank=True) href = models.TextField(blank=True)
email = 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: def __str__(self) -> str:
"""Return string representation of the author.""" """Return string representation of the author."""
return f"{self.name} - {self.email} - {self.href}" return f"{self.name} - {self.email} - {self.href}"
class Generator(models.Model): class Generator(models.Model):
"""A generator of a feed.""" """What program or service generated the feed."""
created_at = models.DateTimeField(auto_now_add=True) created_at = models.DateTimeField(auto_now_add=True)
modified_at = models.DateTimeField(auto_now=True) modified_at = models.DateTimeField(auto_now=True)
@ -55,6 +70,9 @@ class Generator(models.Model):
"""Meta information for the generator model.""" """Meta information for the generator model."""
unique_together: typing.ClassVar[list[str]] = ["name", "version", "href"] 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: def __str__(self) -> str:
"""Return string representation of the generator.""" """Return string representation of the generator."""
@ -71,6 +89,14 @@ class Links(models.Model):
href = models.TextField(blank=True) href = models.TextField(blank=True)
title = 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: def __str__(self) -> str:
"""Return string representation of the links.""" """Return string representation of the links."""
return self.href return self.href
@ -85,6 +111,14 @@ class Publisher(models.Model):
href = models.TextField(blank=True) href = models.TextField(blank=True)
email = 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: def __str__(self) -> str:
"""Return string representation of the publisher.""" """Return string representation of the publisher."""
return self.name return self.name
@ -169,14 +203,17 @@ class Feed(models.Model):
updated = models.TextField(blank=True) updated = models.TextField(blank=True)
updated_parsed = models.DateTimeField(null=True, 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: def __str__(self) -> str:
"""Return string representation of the feed.""" """Return string representation of the feed."""
return f"{self.domain} - {self.title}" 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): class Entry(models.Model):
"""Each feed has multiple entries.""" """Each feed has multiple entries."""
@ -225,10 +262,13 @@ class Entry(models.Model):
updated = models.TextField(blank=True) updated = models.TextField(blank=True)
updated_parsed = models.DateTimeField(null=True, 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: def __str__(self) -> str:
"""Return string representation of the entry.""" """Return string representation of the entry."""
return f"{self.feed} - {self.title}" 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]

View file

@ -1,27 +1,14 @@
{% extends "base.html" %} {% extends "base.html" %}
{% block content %} {% block content %}
<h2>{{ feed.feed_url }}</h2> <h2>{{ feed.feed_url }}</h2>
<dl> <p>{{ feed.description }}</p>
{% for field_name, field_value in feed.get_fields %}
{% if field_value %}
<dt>{{ field_name }}</dt>
<dd>
{{ field_value }}
</dd>
{% endif %}
{% endfor %}
</dl>
<h3>Entries</h3> <h3>Entries</h3>
<dl> <ul>
{% for entry in entries %} {% for entry in entries %}
{% for field_name, field_value in entry.get_fields %} <li>
{% if field_value %} <a href="{{ entry.link }}">{{ entry.title }}</a>
<dt>{{ field_name }}</dt> <p>{{ entry.summary }}</p>
<dd> </li>
{{ field_value }}
</dd>
{% endif %}
{% endfor %} {% endfor %}
{% endfor %} </ul>
</dl>
{% endblock %} {% endblock %}