Skip to content
Snippets Groups Projects
Commit 7ffdc77f authored by Hangzhi Yu's avatar Hangzhi Yu
Browse files

Add poster groups dynamically as routes and menu entries

parent 2cff8501
No related branches found
No related tags found
No related merge requests found
Pipeline #111221 canceled
from django.contrib import admin
from aleksis.core.models import DynamicRoute
from .models import Poster, PosterGroup
admin.site.register(PosterGroup)
class PosterGroupAdmin(admin.ModelAdmin):
exclude = [f.name for f in DynamicRoute._meta.get_fields()]
admin.site.register(PosterGroup, PosterGroupAdmin)
admin.site.register(Poster)
export default {};
{
}
# Generated by Django 4.1.5 on 2023-02-03 16:42
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
("contenttypes", "0002_remove_content_type_name"),
("resint", "0007_current_file_not_null"),
]
operations = [
migrations.AlterField(
model_name="postergroup",
name="slug",
field=models.SlugField(
help_text="If you use 'example', the filename will be 'example.pdf'.",
unique=True,
verbose_name="Slug used in URL name",
),
),
]
# Generated by Django 4.1.5 on 2023-02-03 17:07
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
("core", "0049_add_dynamicroute_model"),
("contenttypes", "0002_remove_content_type_name"),
("resint", "0008_postergroup_slug_unique"),
]
operations = [
migrations.AlterModelManagers(
name="postergroup",
managers=[],
),
migrations.RemoveField(
model_name="postergroup",
name="extended_data",
),
migrations.RemoveField(
model_name="postergroup",
name="id",
),
migrations.RemoveField(
model_name="postergroup",
name="site",
),
migrations.AddField(
model_name="postergroup",
name="dynamicroute_ptr",
field=models.OneToOneField(
auto_created=True,
default=None,
on_delete=django.db.models.deletion.CASCADE,
parent_link=True,
primary_key=True,
serialize=False,
to="core.dynamicroute",
),
preserve_default=False,
),
]
# Generated by Django 4.1.5 on 2023-02-03 17:13
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
("contenttypes", "0002_remove_content_type_name"),
("resint", "0009_alter_postergroup_managers_and_more"),
]
operations = [
migrations.RemoveConstraint(
model_name="postergroup",
name="unique_site_name",
),
migrations.RemoveConstraint(
model_name="postergroup",
name="unique_site_slug",
),
migrations.AlterField(
model_name="postergroup",
name="name",
field=models.CharField(max_length=255, unique=True, verbose_name="Name"),
),
]
......@@ -4,6 +4,7 @@ from typing import Any, Optional
from django.core.files import File
from django.core.validators import FileExtensionValidator, MaxValueValidator, MinValueValidator
from django.db import models
from django.urls import reverse
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
......@@ -15,17 +16,19 @@ from celery.states import SUCCESS
from reversion.models import Revision, Version
from aleksis.core.mixins import ExtensibleModel, ExtensiblePolymorphicModel
from aleksis.core.models import DynamicRoute
from aleksis.core.util.pdf import generate_pdf_from_template
class PosterGroup(ExtensibleModel):
class PosterGroup(DynamicRoute):
"""Group for time-based documents, called posters."""
slug = models.SlugField(
verbose_name=_("Slug used in URL name"),
help_text=_("If you use 'example', the filename will be 'example.pdf'."),
unique=True
)
name = models.CharField(max_length=255, verbose_name=_("Name"))
name = models.CharField(max_length=255, verbose_name=_("Name"), unique=True)
publishing_day = models.PositiveSmallIntegerField(
verbose_name=_("Publishing weekday"), choices=i18n_day_name_choices_lazy()
)
......@@ -43,10 +46,6 @@ class PosterGroup(ExtensibleModel):
class Meta:
verbose_name = _("Poster group")
verbose_name_plural = _("Poster groups")
constraints = [
models.UniqueConstraint(fields=["site_id", "name"], name="unique_site_name"),
models.UniqueConstraint(fields=["site_id", "slug"], name="unique_site_slug"),
]
permissions = [
("view_poster_of_group", _("Can view all posters of this group")),
("upload_poster_to_group", _("Can upload new posters to this group")),
......@@ -57,6 +56,23 @@ class PosterGroup(ExtensibleModel):
def __str__(self) -> str:
return f"{self.name} ({self.publishing_day_name}, {self.publishing_time})"
def save(self, *args, **kwargs):
self.parent_route_name = ""
self.route_path = reverse("poster_show_current", args=[self.slug])
self.route_name = f"resint.posterGroup.{self.slug}"
self.display_account_menu = False
self.display_sidenav_menu = self.show_in_menu
self.sidenav_menu_root = True
self.menu_new_tab = True
self.menu_title = self.name
self.menu_icon = "mdi-file-pdf-box"
super().save(*args, **kwargs)
@property
def publishing_day_name(self) -> str:
"""Return the full name of the publishing day (e. g. Monday)."""
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment