diff --git a/entries/jinja2/entries/h-entry.html b/entries/jinja2/entries/h-entry.html index 8278a5b..2ae9932 100644 --- a/entries/jinja2/entries/h-entry.html +++ b/entries/jinja2/entries/h-entry.html @@ -43,8 +43,8 @@ {% endfor %} {% for s in entry.syndications.all() %} {{i}} - {{i}} - {{i}}{{ s.profile }} + {{i}} + {{i}}{{ s.site.domain }} {{i}} {% endfor %} {{i}} diff --git a/entries/migrations/0012_auto_20180628_2044.py b/entries/migrations/0012_auto_20180628_2044.py new file mode 100644 index 0000000..8769528 --- /dev/null +++ b/entries/migrations/0012_auto_20180628_2044.py @@ -0,0 +1,29 @@ +# Generated by Django 2.0.6 on 2018-06-28 10:44 + +import computed_property.fields +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('entries', '0011_auto_20171120_1108'), + ] + + operations = [ + migrations.AlterModelOptions( + name='syndication', + options={'ordering': ['domain']}, + ), + migrations.RemoveField( + model_name='syndication', + name='profile', + ), + migrations.AddField( + model_name='syndication', + name='domain', + field=computed_property.fields.ComputedCharField( + compute_from='calc_domain', default='', editable=False, max_length=255), + preserve_default=False, + ), + ] diff --git a/entries/models.py b/entries/models.py index 52bb73d..05224b3 100644 --- a/entries/models.py +++ b/entries/models.py @@ -1,17 +1,19 @@ +from computed_property import ComputedCharField from django.contrib.auth import get_user_model -from django.contrib.sites.models import Site +from django.contrib.sites.models import Site as DjangoSite from django.db import models from django.urls import reverse +from django.utils.functional import cached_property from itertools import groupby from mf2util import interpret from slugify import slugify from textwrap import shorten -from urllib.parse import urljoin +from urllib.parse import urljoin, urlparse from lemonshort.short_url import short_url from meta.models import ModelMeta from model_utils.models import TimeStampedModel -from users.models import Profile +from users.models import Site from . import kinds from lemoncurry import requests, utils @@ -141,7 +143,7 @@ class Entry(ModelMeta, TimeStampedModel): @property def absolute_url(self): - base = 'https://' + Site.objects.get_current().domain + base = 'https://' + DjangoSite.objects.get_current().domain return urljoin(base, self.url) @property @@ -162,7 +164,7 @@ class Entry(ModelMeta, TimeStampedModel): @property def json_ld(self): - base = 'https://' + Site.objects.get_current().domain + base = 'https://' + DjangoSite.objects.get_current().domain url = urljoin(base, self.url) posting = { @@ -190,21 +192,31 @@ class Entry(ModelMeta, TimeStampedModel): ordering = ['-created'] -class SyndicationManager(models.Manager): - def get_queryset(self): - qs = super(SyndicationManager, self).get_queryset() - return qs.select_related('profile__site') - - class Syndication(models.Model): - objects = SyndicationManager() entry = models.ForeignKey( Entry, related_name='syndications', on_delete=models.CASCADE ) - profile = models.ForeignKey(Profile, on_delete=models.CASCADE) url = models.CharField(max_length=255) + domain = ComputedCharField( + compute_from='calc_domain', max_length=255, + ) + + def calc_domain(self): + domain = urlparse(self.url).netloc + if domain.startswith('www.'): + domain = domain[4:] + return domain + + @cached_property + def site(self): + d = self.domain + try: + return Site.objects.get(domain=d) + except Site.DoesNotExist: + return Site(name=d, domain=d, icon='fas fa-newspaper') + class Meta: - ordering = ['profile'] + ordering = ['domain']