Various improvements for flatpages

This commit is contained in:
2022-08-25 12:44:04 +02:00
parent 4ed95d0edf
commit d30d9fc9ed
12 changed files with 69 additions and 16 deletions

View File

@@ -6,11 +6,11 @@ from django.db import migrations
def md_to_html(apps, schema_editor): def md_to_html(apps, schema_editor):
fields = { fields = {
'Consist': ['notes'], "Consist": ["notes"],
} }
for m in fields.items(): for m in fields.items():
model = apps.get_model('consist', m[0]) model = apps.get_model("consist", m[0])
for row in model.objects.all(): for row in model.objects.all():
for field in m[1]: for field in m[1]:

View File

@@ -9,7 +9,8 @@ admin.site.register(SiteConfiguration, SingletonModelAdmin)
@admin.register(Flatpage) @admin.register(Flatpage)
class FlatpageAdmin(admin.ModelAdmin): class FlatpageAdmin(admin.ModelAdmin):
readonly_fields = ("path", "creation_time", "updated_time") readonly_fields = ("path", "creation_time", "updated_time")
list_display = ("name", "path") list_display = ("name", "path", "published", "get_link")
list_filter = ("published",)
search_fields = ("name",) search_fields = ("name",)
fieldsets = ( fieldsets = (
@@ -20,7 +21,7 @@ class FlatpageAdmin(admin.ModelAdmin):
"name", "name",
"path", "path",
"content", "content",
"draft", "published",
) )
}, },
), ),

View File

@@ -6,12 +6,12 @@ from django.db import migrations
def md_to_html(apps, schema_editor): def md_to_html(apps, schema_editor):
fields = { fields = {
'SiteConfiguration': ['about', 'footer', 'footer_extended'], "SiteConfiguration": ["about", "footer", "footer_extended"],
'Flatpage': ['content'] "Flatpage": ["content"]
} }
for m in fields.items(): for m in fields.items():
model = apps.get_model('portal', m[0]) model = apps.get_model("portal", m[0])
for row in model.objects.all(): for row in model.objects.all():
for field in m[1]: for field in m[1]:

View File

@@ -0,0 +1,42 @@
# Generated by Django 4.1 on 2022-08-25 10:18
from django.db import migrations, models
def reverse_bool(apps, schema_editor):
model = apps.get_model("portal", "Flatpage")
for row in model.objects.all():
row.published = not row.draft
row.save(update_fields=["published"])
def reverse_bool_back(apps, schema_editor):
model = apps.get_model("portal", "Flatpage")
for row in model.objects.all():
row.draft = not row.published
row.save(update_fields=["draft"])
class Migration(migrations.Migration):
dependencies = [
("portal", "0012_md_to_html"),
]
operations = [
migrations.AddField(
model_name="flatpage",
name="published",
field=models.BooleanField(default=False),
),
migrations.RunPython(
reverse_bool,
reverse_code=reverse_bool_back
),
migrations.RemoveField(
model_name="flatpage",
name="draft",
),
]

View File

@@ -2,6 +2,7 @@ import django
from django.db import models from django.db import models
from django.urls import reverse from django.urls import reverse
from django.dispatch.dispatcher import receiver from django.dispatch.dispatcher import receiver
from django.utils.safestring import mark_safe
from solo.models import SingletonModel from solo.models import SingletonModel
from ckeditor.fields import RichTextField from ckeditor.fields import RichTextField
@@ -51,7 +52,7 @@ class SiteConfiguration(SingletonModel):
class Flatpage(models.Model): class Flatpage(models.Model):
name = models.CharField(max_length=256, unique=True) name = models.CharField(max_length=256, unique=True)
path = models.CharField(max_length=256, unique=True) path = models.CharField(max_length=256, unique=True)
draft = models.BooleanField(default=True) published = models.BooleanField(default=False)
content = RichTextUploadingField() content = RichTextUploadingField()
creation_time = models.DateTimeField(auto_now_add=True) creation_time = models.DateTimeField(auto_now_add=True)
updated_time = models.DateTimeField(auto_now=True) updated_time = models.DateTimeField(auto_now=True)
@@ -62,6 +63,14 @@ class Flatpage(models.Model):
def get_absolute_url(self): def get_absolute_url(self):
return reverse("flatpage", kwargs={"flatpage": self.path}) return reverse("flatpage", kwargs={"flatpage": self.path})
def get_link(self):
if self.published:
return mark_safe(
'<a href="{0}" target="_blank">Link</a>'.format(
self.get_absolute_url()
)
)
@receiver(models.signals.pre_save, sender=Flatpage) @receiver(models.signals.pre_save, sender=Flatpage)
def tag_pre_save(sender, instance, **kwargs): def tag_pre_save(sender, instance, **kwargs):

View File

@@ -73,7 +73,7 @@
</li> </li>
{% show_menu %} {% show_menu %}
</ul> </ul>
{% include 'includes/search.html' %} {% include 'includes/search.html' %}
</div> </div>
</div> </div>
</nav> </nav>

View File

@@ -3,10 +3,10 @@
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" role="button" data-bs-toggle="dropdown" aria-expanded="false"> <a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" role="button" data-bs-toggle="dropdown" aria-expanded="false">
More ... More ...
</a> </a>
{% for m in menu %}
<ul class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink"> <ul class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
{% for m in menu %}
<li><a class="dropdown-item" href="{{ m.get_absolute_url }}">{{ m.name }}</a></li> <li><a class="dropdown-item" href="{{ m.get_absolute_url }}">{{ m.name }}</a></li>
</ul>
{% endfor %} {% endfor %}
</ul>
</li> </li>
{% endif %} {% endif %}

View File

@@ -7,6 +7,7 @@
<li><a class="dropdown-item" href="{% url 'admin:roster_rollingstock_changelist' %}">Rolling stock</a></li> <li><a class="dropdown-item" href="{% url 'admin:roster_rollingstock_changelist' %}">Rolling stock</a></li>
<li><a class="dropdown-item" href="{% url 'admin:consist_consist_changelist' %}">Consists</a></li> <li><a class="dropdown-item" href="{% url 'admin:consist_consist_changelist' %}">Consists</a></li>
<li><a class="dropdown-item" href="{% url 'admin:app_list' 'metadata' %}">Metadata</a></li> <li><a class="dropdown-item" href="{% url 'admin:app_list' 'metadata' %}">Metadata</a></li>
<li><a class="dropdown-item" href="{% url 'admin:portal_flatpage_changelist' %}">Pages</a></li>
<li><hr class="dropdown-divider"></li> <li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="{% url 'admin:index' %}">Admin</a></li> <li><a class="dropdown-item" href="{% url 'admin:index' %}">Admin</a></li>
<li><a class="dropdown-item" href="{% url 'admin:portal_siteconfiguration_changelist' %}">Site configuration</a></li> <li><a class="dropdown-item" href="{% url 'admin:portal_siteconfiguration_changelist' %}">Site configuration</a></li>

View File

@@ -6,5 +6,5 @@ register = template.Library()
@register.inclusion_tag('flatpage_menu.html') @register.inclusion_tag('flatpage_menu.html')
def show_menu(): def show_menu():
menu = Flatpage.objects.all() menu = Flatpage.objects.filter(published=True).order_by("name")
return {"menu": menu} return {"menu": menu}

View File

@@ -249,7 +249,7 @@ class GetFlatpage(View):
def get(self, request, flatpage): def get(self, request, flatpage):
try: try:
flatpage = Flatpage.objects.get( flatpage = Flatpage.objects.get(
Q(Q(path=flatpage) & Q(draft=False)) Q(Q(path=flatpage) & Q(published=True))
) )
except ObjectDoesNotExist: except ObjectDoesNotExist:
raise Http404 raise Http404

View File

@@ -1,4 +1,4 @@
from ram.utils import git_suffix from ram.utils import git_suffix
__version__ = "0.0.16" __version__ = "0.0.17"
__version__ += git_suffix(__file__) __version__ += git_suffix(__file__)

View File

@@ -6,11 +6,11 @@ from django.db import migrations
def md_to_html(apps, schema_editor): def md_to_html(apps, schema_editor):
fields = { fields = {
'RollingStock': ['notes'], "RollingStock": ["notes"],
} }
for m in fields.items(): for m in fields.items():
model = apps.get_model('roster', m[0]) model = apps.get_model("roster", m[0])
for row in model.objects.all(): for row in model.objects.all():
for field in m[1]: for field in m[1]: