63 lines
1.5 KiB
Python
63 lines
1.5 KiB
Python
from datetime import timedelta
|
|
from typing import Any
|
|
|
|
from django.db import models
|
|
from django.utils import timezone
|
|
from wagtail.admin.panels import FieldPanel, MultiFieldPanel
|
|
|
|
from website.common.models import BaseContentPage, BaseListingPage
|
|
|
|
|
|
class TalksListPage(BaseListingPage):
|
|
max_count = 1
|
|
subpage_types = ["talks.TalkPage"]
|
|
|
|
|
|
class TalkPage(BaseContentPage):
|
|
subpage_types: list[Any] = []
|
|
parent_page_types = [TalksListPage]
|
|
|
|
date = models.DateField(default=timezone.now)
|
|
|
|
duration = models.DurationField()
|
|
|
|
slides_url = models.URLField(blank=True)
|
|
video_url = models.URLField(blank=True)
|
|
|
|
location_name = models.CharField(max_length=64, blank=True)
|
|
location_url = models.URLField(blank=True)
|
|
|
|
content_panels = BaseContentPage.content_panels + [
|
|
MultiFieldPanel(
|
|
[
|
|
FieldPanel("slides_url"),
|
|
FieldPanel("video_url"),
|
|
],
|
|
heading="Media",
|
|
),
|
|
MultiFieldPanel(
|
|
[
|
|
FieldPanel("location_name"),
|
|
FieldPanel("location_url"),
|
|
],
|
|
heading="Location",
|
|
),
|
|
FieldPanel("duration"),
|
|
]
|
|
|
|
promote_panels = BaseContentPage.promote_panels + [
|
|
FieldPanel("date"),
|
|
]
|
|
|
|
@property
|
|
def show_table_of_contents(self) -> bool:
|
|
return False
|
|
|
|
@property
|
|
def reading_time(self) -> timedelta:
|
|
return self.duration
|
|
|
|
@property
|
|
def word_count(self) -> int:
|
|
return 0
|