diff --git a/ram/portal/admin.py b/ram/portal/admin.py index 3aafb97..ef8097e 100644 --- a/ram/portal/admin.py +++ b/ram/portal/admin.py @@ -1,6 +1,37 @@ from django.contrib import admin from solo.admin import SingletonModelAdmin -from portal.models import SiteConfiguration +from portal.models import SiteConfiguration, Flatpage admin.site.register(SiteConfiguration, SingletonModelAdmin) + + +@admin.register(Flatpage) +class FlatpageAdmin(admin.ModelAdmin): + readonly_fields = ("path", "creation_time", "updated_time") + list_display = ("name", "path") + search_fields = ("name",) + + fieldsets = ( + ( + None, + { + "fields": ( + "name", + "path", + "content", + "draft", + ) + }, + ), + ( + "Audit", + { + "classes": ("collapse",), + "fields": ( + "creation_time", + "updated_time", + ), + }, + ), + ) diff --git a/ram/portal/migrations/0008_flatpage.py b/ram/portal/migrations/0008_flatpage.py new file mode 100644 index 0000000..1f919f4 --- /dev/null +++ b/ram/portal/migrations/0008_flatpage.py @@ -0,0 +1,22 @@ +# Generated by Django 4.0.6 on 2022-08-07 15:01 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('portal', '0007_siteconfiguration_items_ordering'), + ] + + operations = [ + migrations.CreateModel( + name='Flatpage', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=256, unique=True)), + ('draft', models.BooleanField(default=True)), + ('content', models.TextField(blank=True)), + ], + ), + ] diff --git a/ram/portal/migrations/0009_flatpage_path.py b/ram/portal/migrations/0009_flatpage_path.py new file mode 100644 index 0000000..7aae1bc --- /dev/null +++ b/ram/portal/migrations/0009_flatpage_path.py @@ -0,0 +1,19 @@ +# Generated by Django 4.0.6 on 2022-08-07 15:19 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('portal', '0008_flatpage'), + ] + + operations = [ + migrations.AddField( + model_name='flatpage', + name='path', + field=models.CharField(default='', max_length=256, unique=True), + preserve_default=False, + ), + ] diff --git a/ram/portal/migrations/0010_flatpage_creation_time_flatpage_updated_time.py b/ram/portal/migrations/0010_flatpage_creation_time_flatpage_updated_time.py new file mode 100644 index 0000000..e05e3cd --- /dev/null +++ b/ram/portal/migrations/0010_flatpage_creation_time_flatpage_updated_time.py @@ -0,0 +1,25 @@ +# Generated by Django 4.0.6 on 2022-08-07 15:46 + +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('portal', '0009_flatpage_path'), + ] + + operations = [ + migrations.AddField( + model_name='flatpage', + name='creation_time', + field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now), + preserve_default=False, + ), + migrations.AddField( + model_name='flatpage', + name='updated_time', + field=models.DateTimeField(auto_now=True), + ), + ] diff --git a/ram/portal/models.py b/ram/portal/models.py index 09b306e..225493f 100644 --- a/ram/portal/models.py +++ b/ram/portal/models.py @@ -1,8 +1,11 @@ import django from django.db import models +from django.urls import reverse +from django.dispatch.dispatcher import receiver +from solo.models import SingletonModel from ram import __version__ as app_version -from solo.models import SingletonModel +from ram.utils import slugify class SiteConfiguration(SingletonModel): @@ -40,3 +43,23 @@ class SiteConfiguration(SingletonModel): def django_version(self): return django.get_version() + + +class Flatpage(models.Model): + name = models.CharField(max_length=256, unique=True) + path = models.CharField(max_length=256, unique=True) + draft = models.BooleanField(default=True) + content = models.TextField(blank=True) + creation_time = models.DateTimeField(auto_now_add=True) + updated_time = models.DateTimeField(auto_now=True) + + def __str__(self): + return self.name + + def get_absolute_url(self): + return reverse("flatpage", kwargs={"flatpage": self.path}) + + +@receiver(models.signals.pre_save, sender=Flatpage) +def tag_pre_save(sender, instance, **kwargs): + instance.path = slugify(instance.name) diff --git a/ram/portal/templates/base.html b/ram/portal/templates/base.html index cf2e8c1..ed2f9ec 100644 --- a/ram/portal/templates/base.html +++ b/ram/portal/templates/base.html @@ -1,6 +1,7 @@ {% load static %} {% load solo_tags %} {% load markdown %} +{% load show_menu %} {% get_solo 'portal.SiteConfiguration' as site_conf %} @@ -71,6 +72,7 @@