diff options
author | luxagraf <sng@luxagraf.net> | 2019-03-15 21:57:12 -0600 |
---|---|---|
committer | luxagraf <sng@luxagraf.net> | 2019-03-15 21:57:12 -0600 |
commit | 1274988c5fed1d8f23b244fba7408d6883d138cf (patch) | |
tree | 5c7eb0bc10553e8747cb3306fb39e54e2f00773d /app | |
parent | 7e6dcc8c6c1034496eb93ca8730a4febc105e80a (diff) |
added related items complete with template and styles
Diffstat (limited to 'app')
-rw-r--r-- | app/jrnl/admin.py | 17 | ||||
-rw-r--r-- | app/jrnl/migrations/0001_squashed_0019_remove_entry_thumbnail.py | 5 | ||||
-rw-r--r-- | app/jrnl/migrations/0036_enjoyitem.py | 23 | ||||
-rw-r--r-- | app/jrnl/migrations/0037_enjoyitem_entry.py | 20 | ||||
-rw-r--r-- | app/jrnl/migrations/0038_remove_enjoyitem_entry.py | 17 | ||||
-rw-r--r-- | app/jrnl/migrations/0039_enjoyitem_order.py | 18 | ||||
-rw-r--r-- | app/jrnl/migrations/0040_auto_20190315_1906.py | 20 | ||||
-rw-r--r-- | app/jrnl/migrations/0041_auto_20190315_2240.py | 28 | ||||
-rw-r--r-- | app/jrnl/models.py | 11 | ||||
-rw-r--r-- | app/jrnl/views.py | 6 | ||||
-rw-r--r-- | app/sightings/models.py | 7 |
11 files changed, 168 insertions, 4 deletions
diff --git a/app/jrnl/admin.py b/app/jrnl/admin.py index 3c35272..d800f34 100644 --- a/app/jrnl/admin.py +++ b/app/jrnl/admin.py @@ -1,19 +1,31 @@ from django.contrib import admin from django import forms from django.contrib.gis.admin import OSMGeoAdmin +from django.contrib.contenttypes.admin import GenericStackedInline from utils.widgets import AdminImageWidget, LGEntryForm -from .models import Entry, HomepageCurrator, Home +from .models import Entry, HomepageCurrator, Home, RelatedPost from photos.forms import GalleryForm from photos.models import LuxImage from utils.util import get_latlon +@admin.register(RelatedPost) +class RelatedPostAdmin(admin.ModelAdmin): + pass + + @admin.register(Entry) class EntryAdmin(OSMGeoAdmin): form = LGEntryForm + def get_queryset(self, request): + test_model_qs = super(EntryAdmin, self).get_queryset(request) + test_model_qs = test_model_qs.prefetch_related('related').prefetch_related('books') + + return test_model_qs + def render_change_form(self, request, context, *args, **kwargs): #context['adminform'].form.fields['featured_image'].queryset = LuxImage.objects.all()[:200] return super(EntryAdmin, self).render_change_form(request, context, *args, **kwargs) @@ -32,7 +44,7 @@ class EntryAdmin(OSMGeoAdmin): search_fields = ['title', 'body_markdown'] prepopulated_fields = {"slug": ('title',)} list_filter = ('pub_date', 'enable_comments', 'status', 'location__state__country__lux_region') - filter_horizontal = ('field_notes', 'books') + filter_horizontal = ('field_notes', 'books', 'related') fieldsets = ( ('Entry', { 'fields': ( @@ -63,6 +75,7 @@ class EntryAdmin(OSMGeoAdmin): 'fields': ( 'field_notes', 'books', + 'related', ), 'classes': ( 'collapse', diff --git a/app/jrnl/migrations/0001_squashed_0019_remove_entry_thumbnail.py b/app/jrnl/migrations/0001_squashed_0019_remove_entry_thumbnail.py index 4b1dea3..7b1b247 100644 --- a/app/jrnl/migrations/0001_squashed_0019_remove_entry_thumbnail.py +++ b/app/jrnl/migrations/0001_squashed_0019_remove_entry_thumbnail.py @@ -70,6 +70,11 @@ class Migration(migrations.Migration): ), migrations.AddField( model_name='entry', + name='field_notes', + field=models.ManyToManyField(blank=True, to='fieldnotes.FieldNote'), + ), + migrations.AddField( + model_name='entry', name='books', field=models.ManyToManyField(blank=True, to='books.Book'), ), diff --git a/app/jrnl/migrations/0036_enjoyitem.py b/app/jrnl/migrations/0036_enjoyitem.py new file mode 100644 index 0000000..aaa8596 --- /dev/null +++ b/app/jrnl/migrations/0036_enjoyitem.py @@ -0,0 +1,23 @@ +# Generated by Django 2.1.7 on 2019-03-14 23:42 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('contenttypes', '0002_remove_content_type_name'), + ('jrnl', '0035_auto_20190303_1610'), + ] + + operations = [ + migrations.CreateModel( + name='EnjoyItem', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('object_id', models.PositiveIntegerField()), + ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')), + ], + ), + ] diff --git a/app/jrnl/migrations/0037_enjoyitem_entry.py b/app/jrnl/migrations/0037_enjoyitem_entry.py new file mode 100644 index 0000000..733f94c --- /dev/null +++ b/app/jrnl/migrations/0037_enjoyitem_entry.py @@ -0,0 +1,20 @@ +# Generated by Django 2.1.7 on 2019-03-15 00:13 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('jrnl', '0036_enjoyitem'), + ] + + operations = [ + migrations.AddField( + model_name='enjoyitem', + name='entry', + field=models.ForeignKey(default='', on_delete=django.db.models.deletion.CASCADE, to='jrnl.Entry'), + preserve_default=False, + ), + ] diff --git a/app/jrnl/migrations/0038_remove_enjoyitem_entry.py b/app/jrnl/migrations/0038_remove_enjoyitem_entry.py new file mode 100644 index 0000000..0eec153 --- /dev/null +++ b/app/jrnl/migrations/0038_remove_enjoyitem_entry.py @@ -0,0 +1,17 @@ +# Generated by Django 2.1.7 on 2019-03-15 00:20 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('jrnl', '0037_enjoyitem_entry'), + ] + + operations = [ + migrations.RemoveField( + model_name='enjoyitem', + name='entry', + ), + ] diff --git a/app/jrnl/migrations/0039_enjoyitem_order.py b/app/jrnl/migrations/0039_enjoyitem_order.py new file mode 100644 index 0000000..41c5324 --- /dev/null +++ b/app/jrnl/migrations/0039_enjoyitem_order.py @@ -0,0 +1,18 @@ +# Generated by Django 2.1.7 on 2019-03-15 18:48 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('jrnl', '0038_remove_enjoyitem_entry'), + ] + + operations = [ + migrations.AddField( + model_name='enjoyitem', + name='order', + field=models.IntegerField(default=1), + ), + ] diff --git a/app/jrnl/migrations/0040_auto_20190315_1906.py b/app/jrnl/migrations/0040_auto_20190315_1906.py new file mode 100644 index 0000000..9ce813b --- /dev/null +++ b/app/jrnl/migrations/0040_auto_20190315_1906.py @@ -0,0 +1,20 @@ +# Generated by Django 2.1.7 on 2019-03-15 19:06 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('jrnl', '0039_enjoyitem_order'), + ] + + operations = [ + migrations.RemoveField( + model_name='enjoyitem', + name='content_type', + ), + migrations.DeleteModel( + name='EnjoyItem', + ), + ] diff --git a/app/jrnl/migrations/0041_auto_20190315_2240.py b/app/jrnl/migrations/0041_auto_20190315_2240.py new file mode 100644 index 0000000..06b9697 --- /dev/null +++ b/app/jrnl/migrations/0041_auto_20190315_2240.py @@ -0,0 +1,28 @@ +# Generated by Django 2.1.7 on 2019-03-15 22:40 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('contenttypes', '0002_remove_content_type_name'), + ('jrnl', '0040_auto_20190315_1906'), + ] + + operations = [ + migrations.CreateModel( + name='RelatedPost', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('slug', models.SlugField()), + ('post_model', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='contenttypes.ContentType')), + ], + ), + migrations.AddField( + model_name='entry', + name='related', + field=models.ManyToManyField(blank=True, to='jrnl.RelatedPost'), + ), + ] diff --git a/app/jrnl/models.py b/app/jrnl/models.py index 88fd84b..a88e79a 100644 --- a/app/jrnl/models.py +++ b/app/jrnl/models.py @@ -3,6 +3,8 @@ import os from django.dispatch import receiver from django.contrib.gis.db import models +from django.contrib.contenttypes.fields import GenericRelation, GenericForeignKey +from django.contrib.contenttypes.models import ContentType from django.urls import reverse from django.utils.functional import cached_property from django.apps import apps @@ -35,6 +37,14 @@ def image_url_replace(s): return s +class RelatedPost(models.Model): + post_model = models.ForeignKey(ContentType, null=True, on_delete=models.SET_NULL) + slug = models.SlugField() + + def __str__(self): + return self.slug + + class Entry(models.Model): title = models.CharField(max_length=200) subtitle = models.CharField(max_length=200, blank=True) @@ -67,6 +77,7 @@ class Entry(models.Model): has_video = models.BooleanField(blank=True, default=False) field_notes = models.ManyToManyField(FieldNote, blank=True) books = models.ManyToManyField(Book, blank=True) + related = models.ManyToManyField(RelatedPost, blank=True) class Meta: ordering = ('-pub_date',) diff --git a/app/jrnl/views.py b/app/jrnl/views.py index 43ca2d9..7ea3e41 100644 --- a/app/jrnl/views.py +++ b/app/jrnl/views.py @@ -3,6 +3,7 @@ from django.views.generic.detail import DetailView from django.views.generic.dates import DateDetailView from django.views.generic.dates import YearArchiveView, MonthArchiveView from django.contrib.syndication.views import Feed +from django.apps import apps from django.shortcuts import get_object_or_404 from django.conf import settings from django.db.models import Q @@ -96,6 +97,11 @@ class EntryDetailView(DateDetailView): Q(location=self.location) | Q(location__in=Location.objects.filter(parent=self.location)) ).select_related().order_by('ap_id', 'ap__apclass__kind').distinct("ap") + related = [] + for obj in self.object.related.all(): + model = apps.get_model(obj.post_model.app_label, obj.post_model.model) + related.append(model.objects.get(slug=obj.slug)) + context['related'] = related return context diff --git a/app/sightings/models.py b/app/sightings/models.py index 5723776..3852b1c 100644 --- a/app/sightings/models.py +++ b/app/sightings/models.py @@ -12,7 +12,7 @@ from django.conf import settings from bs4 import BeautifulSoup from locations.models import Location -from photos.models import LuxImage +from photos.models import LuxImage, LuxImageSize from utils.next_prev import next_in_order, prev_in_order from utils.util import render_images, extract_main_image, markdown_to_html @@ -75,7 +75,7 @@ class AP(models.Model): return self.common_name def get_image_url(self): - return "%s%s" % (settings.IMAGES_URL, self.image.url.split("media")[1][8:]) + return "%s%s" % (settings.IMAGES_URL, self.image.image.url.split("media")[1][8:]) def get_absolute_url(self): return reverse("sightings:detail", kwargs={"slug": self.slug}) @@ -121,6 +121,9 @@ class AP(models.Model): main_image = extract_main_image(self.body_markdown) if main_image: self.image = main_image + s = LuxImageSize.objects.get(name="featured_jrnl") + self.image.sizes.add(s) + self.image.save() self.slug = slugify(self.common_name[:50]) super(AP, self).save(*args, **kwargs) |