summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorluxagraf <sng@luxagraf.net>2023-05-23 14:27:03 -0500
committerluxagraf <sng@luxagraf.net>2023-05-23 14:27:03 -0500
commit32ed4dd4eb76ffc1106b57326614c3b156f41411 (patch)
treef6a0c51d0588ca3fb99b4667b92bcd2666a9471e
parentba9cf23958df46d8d35e39aef5c43898be87233e (diff)
posts: added a trip model to organize posts by trip
-rw-r--r--app/posts/admin.py31
-rw-r--r--app/posts/migrations/0022_trip_post_trip.py37
-rw-r--r--app/posts/models.py25
3 files changed, 91 insertions, 2 deletions
diff --git a/app/posts/admin.py b/app/posts/admin.py
index 22c7955..f9d679b 100644
--- a/app/posts/admin.py
+++ b/app/posts/admin.py
@@ -4,7 +4,7 @@ from django.contrib.gis.admin import OSMGeoAdmin
from django.contrib.contenttypes.admin import GenericStackedInline
from utils.widgets import AdminImageWidget, LGEntryForm
-from .models import Post
+from .models import Post, Trip
from media.models import LuxImage
from utils.util import get_latlon
@@ -97,4 +97,31 @@ class PostAdmin(OSMGeoAdmin):
}
-
+@admin.register(Trip)
+class TripAdmin(OSMGeoAdmin):
+ form = LGEntryForm
+ list_display = ('title', )
+ prepopulated_fields = {'slug': ('title',)}
+ search_fields = ('title',)
+ fieldsets = (
+ ('Region', {
+ 'fields': (
+ 'title',
+ 'subtitle',
+ 'body_markdown',
+ 'slug',
+ 'date_started',
+ 'date_ended',
+ 'featured_image'
+ ),
+ 'classes': (
+ 'show',
+ 'extrapretty'
+ )
+ }),
+ )
+ class Media:
+ js = ('image-loader.js', 'next-prev-links.js')
+ css = {
+ "all": ("my_styles.css",)
+ }
diff --git a/app/posts/migrations/0022_trip_post_trip.py b/app/posts/migrations/0022_trip_post_trip.py
new file mode 100644
index 0000000..6f01b0c
--- /dev/null
+++ b/app/posts/migrations/0022_trip_post_trip.py
@@ -0,0 +1,37 @@
+# Generated by Django 4.2.1 on 2023-05-23 15:25
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('media', '0008_auto_20201202_1155'),
+ ('posts', '0021_alter_post_post_type'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='Trip',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('title', models.CharField(max_length=300)),
+ ('subtitle', models.CharField(blank=True, max_length=200)),
+ ('slug', models.SlugField()),
+ ('body_markdown', models.TextField()),
+ ('body_html', models.TextField(blank=True)),
+ ('date_started', models.DateField()),
+ ('date_ended', models.DateField()),
+ ('featured_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='media.luximage')),
+ ],
+ options={
+ 'ordering': ('-date_started',),
+ },
+ ),
+ migrations.AddField(
+ model_name='post',
+ name='trip',
+ field=models.ManyToManyField(blank=True, null=True, to='posts.trip'),
+ ),
+ ]
diff --git a/app/posts/models.py b/app/posts/models.py
index 1510820..5fa8627 100644
--- a/app/posts/models.py
+++ b/app/posts/models.py
@@ -38,6 +38,30 @@ def get_upload_path(self, filename):
return "images/post-images/%s/%s" % (datetime.datetime.today().strftime("%Y"), filename)
+class Trip(models.Model):
+ title = models.CharField(max_length=300)
+ subtitle = models.CharField(max_length=200, blank=True)
+ slug = models.SlugField()
+ body_markdown = models.TextField()
+ body_html = models.TextField(blank=True)
+ date_started = models.DateField()
+ date_ended = models.DateField()
+ featured_image = models.ForeignKey(LuxImage, on_delete=models.SET_NULL, null=True, blank=True)
+
+ def __str_(self):
+ return self.title
+
+ class Meta:
+ ordering = ('-date_started',)
+
+ def save(self, *args, **kwargs):
+ created = self.pk is None
+ if not created:
+ md = render_images(self.body_markdown)
+ self.body_html = markdown_to_html(md)
+ super(Track, self).save(*args, **kwargs)
+
+
class PostType(models.IntegerChoices):
RANGE = 0, ('range')
REVIEW = 1, ('review')
@@ -87,6 +111,7 @@ class Post(models.Model):
disclaimer = models.BooleanField(blank=True, default=False)
books = models.ManyToManyField(Book, blank=True)
old_image = models.FileField(upload_to=get_upload_path, blank=True, null=True, help_text="should be 520 by 290")
+ trip = models.ManyToManyField(Trip, blank=True, null=True)
related = models.ManyToManyField(RelatedPost, blank=True)
point = models.PointField(null=True, blank=True)
location = models.ForeignKey(Location, on_delete=models.CASCADE, null=True, blank=True)