""" Create or customize your page models here. """ from modelcluster.fields import ParentalKey from wagtailcrx.forms import CoderedFormField from wagtailcrx.models import ( CoderedArticlePage, CoderedArticleIndexPage, CoderedEmail, CoderedFormPage, CoderedWebPage ) from django.db import models from wagtail.admin.edit_handlers import FieldPanel from wagtail.core.fields import RichTextField from wagtail.images import get_image_model_string from wagtail.images.edit_handlers import ImageChooserPanel class ArticlePage(CoderedArticlePage): """ Article, suitable for news or blog content. """ class Meta: verbose_name = 'Article' ordering = ['-first_published_at'] # Only allow this page to be created beneath an ArticleIndexPage. parent_page_types = ['website.ArticleIndexPage'] template = 'wagtailcrx/pages/article_page.html' search_template = 'wagtailcrx/pages/article_page.search.html' class ArticleIndexPage(CoderedArticleIndexPage): """ Shows a list of article sub-pages. """ class Meta: verbose_name = 'Article Landing Page' # Override to specify custom index ordering choice/default. index_query_pagemodel = 'website.ArticlePage' # Only allow ArticlePages beneath this page. subpage_types = ['website.ArticlePage'] template = 'wagtailcrx/pages/article_index_page.html' class FormPage(CoderedFormPage): """ A page with an html
. """ class Meta: verbose_name = 'Form' template = 'wagtailcrx/pages/form_page.html' class FormPageField(CoderedFormField): """ A field that links to a FormPage. """ class Meta: ordering = ['sort_order'] page = ParentalKey('FormPage', related_name='form_fields') class FormConfirmEmail(CoderedEmail): """ Sends a confirmation email after submitting a FormPage. """ page = ParentalKey('FormPage', related_name='confirmation_emails') class WebPage(CoderedWebPage): """ General use page with featureful streamfield and SEO attributes. Template renders all Navbar and Footer snippets in existence. """ class Meta: verbose_name = 'Web Page' template = 'wagtailcrx/pages/web_page.html' class CupcakesIndexPage(CoderedWebPage): """ Landing page for Cupcakes """ class Meta: verbose_name = "Cupcakes Landing Page" # Override to specify custom index ordering choice/default. index_query_pagemodel = 'website.CupcakesPage' # Only allow CupcakesPages beneath this page. subpage_types = ['website.CupcakesPage'] template = 'website/pages/cupcakes_index_page.html' class CupcakesPage(CoderedWebPage): """ Custom page for individual cupcakes """ class Meta: verbose_name = "Cupcakes Page" # Only allow this page to be created beneath an CupcakesIndexPage. parent_page_types = ['website.CupcakesIndexPage'] template = "website/pages/cupcakes_page.html" # The name of the cucpake will be in the page title description = RichTextField( verbose_name="Cupcake Description", null=True, blank=True, default="" ) photo = models.ForeignKey( get_image_model_string(), null=True, blank=True, on_delete=models.SET_NULL, related_name='+', verbose_name='Cupcake Photo', ) DAYS_CHOICES = ( ("Weekends Only", "Weekends Only"), ("Monday-Friday", "Monday-Friday"), ("Tuesday/Thursday", "Tuesday/Thursday"), ("Seasonal", "Seasonal"), ) days_available = models.CharField( choices=DAYS_CHOICES, max_length=20, default="" ) # Add custom fields to the body body_content_panels = CoderedWebPage.body_content_panels + [ FieldPanel("description"), FieldPanel("photo"), FieldPanel("days_available"), ]