|
@@ -1,7 +1,12 @@
|
|
|
+from django import forms
|
|
|
from django.db import models
|
|
|
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
|
|
|
|
|
|
-from wagtail.wagtailadmin.edit_handlers import FieldPanel, StreamFieldPanel
|
|
|
+from modelcluster.fields import ParentalManyToManyField
|
|
|
+
|
|
|
+from wagtail.wagtailadmin.edit_handlers import (
|
|
|
+ FieldPanel, MultiFieldPanel, StreamFieldPanel
|
|
|
+)
|
|
|
from wagtail.wagtailcore.fields import StreamField
|
|
|
from wagtail.wagtailcore.models import Page
|
|
|
|
|
@@ -28,6 +33,25 @@ class Country(models.Model):
|
|
|
verbose_name_plural = "Countries of Origin"
|
|
|
|
|
|
|
|
|
+@register_snippet
|
|
|
+class BreadIngredient(models.Model):
|
|
|
+ """
|
|
|
+ Standard Django model used as a Snippet in the BreadPage model.
|
|
|
+ Demonstrates ManyToMany relationship.
|
|
|
+ """
|
|
|
+ name = models.CharField(max_length=255)
|
|
|
+
|
|
|
+ panels = [
|
|
|
+ FieldPanel('name'),
|
|
|
+ ]
|
|
|
+
|
|
|
+ def __str__(self):
|
|
|
+ return self.name
|
|
|
+
|
|
|
+ class Meta:
|
|
|
+ verbose_name_plural = 'Bread ingredients'
|
|
|
+
|
|
|
+
|
|
|
@register_snippet
|
|
|
class BreadType(models.Model):
|
|
|
"""
|
|
@@ -68,11 +92,22 @@ class BreadPage(BasePageFieldsMixin, Page):
|
|
|
on_delete=models.SET_NULL,
|
|
|
related_name='+'
|
|
|
)
|
|
|
+ ingredients = ParentalManyToManyField('BreadIngredient', blank=True)
|
|
|
|
|
|
content_panels = BasePageFieldsMixin.content_panels + [
|
|
|
StreamFieldPanel('body'),
|
|
|
FieldPanel('origin'),
|
|
|
FieldPanel('bread_type'),
|
|
|
+ MultiFieldPanel(
|
|
|
+ [
|
|
|
+ FieldPanel(
|
|
|
+ 'ingredients',
|
|
|
+ widget=forms.CheckboxSelectMultiple,
|
|
|
+ ),
|
|
|
+ ],
|
|
|
+ heading="Additional Metadata",
|
|
|
+ classname="collapsible collapsed"
|
|
|
+ ),
|
|
|
]
|
|
|
|
|
|
search_fields = Page.search_fields + [
|