Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Generated by Django 6.0.3 on 2026-03-06 04:26

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('base', '0026_alter_formpage_body_alter_gallerypage_body_and_more'),
]

operations = [
migrations.AlterField(
model_name='person',
name='first_name',
field=models.CharField(default='', max_length=100),
),
migrations.AlterField(
model_name='person',
name='last_name',
field=models.CharField(default='', max_length=100),
),
]
7 changes: 5 additions & 2 deletions bakerydemo/base/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,10 @@ class Person(
https://github.com/wagtail/django-modelcluster
"""

first_name = models.CharField("First name", max_length=254)
last_name = models.CharField("Last name", max_length=254)
# first_name = models.CharField("First name", max_length=254)
# last_name = models.CharField("Last name", max_length=254)
first_name = models.CharField(max_length=100, default='')
last_name = models.CharField(max_length=100, default='')
job_title = models.CharField("Job title", max_length=254)

image = models.ForeignKey(
Expand Down Expand Up @@ -641,3 +643,4 @@ def get_task_states_user_can_moderate(self, user, **kwargs):
@classmethod
def get_description(cls):
return _("Only a specific user can approve this task")

43 changes: 43 additions & 0 deletions bakerydemo/breads/tests/test_bread_page.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
from wagtail.models import Page, Site
from wagtail.test.utils import WagtailPageTestCase

from bakerydemo.breads.models import BreadPage


class BreadPageRenderTest(WagtailPageTestCase):
@classmethod
def setUpTestData(cls):
"""
Create the page tree and site once for all tests in this class.

Steps:
1. Identify the root page.
2. Create a Site pointing at the root.
3. Create a BreadPage instance with the required fields.
4. Add it to the tree and publish so it is live.
"""
# 1. Identify the root page
cls.root = Page.get_first_root_node()

# 2. Create the Site that will serve our test pages
cls.site = Site.objects.create(
hostname="testserver",
root_page=cls.root,
is_default_site=True,
)

# 3. Create the BreadPage instance we want to test
cls.bread_page = BreadPage(
title="Test bread",
slug="test-bread",
introduction="A test bread page.",
)

# 4. Add to the tree and publish so it is live
cls.root.add_child(instance=cls.bread_page)
cls.bread_page.save_revision().publish()

def test_bread_page_renders(self):
response = self.client.get(self.bread_page.url)
self.assertEqual(response.status_code, 200)

1 change: 1 addition & 0 deletions bakerydemo/people/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

7 changes: 7 additions & 0 deletions bakerydemo/people/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from django.apps import AppConfig


class PeopleConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "bakerydemo.people"

Empty file.
Empty file.
61 changes: 61 additions & 0 deletions bakerydemo/people/management/commands/generate_people.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
from django.core.management.base import BaseCommand
from faker import Faker
from bakerydemo.people.models import PersonIndexPage, PersonPage

fake = Faker()

DEPARTMENTS = [
"Engineering", "Design", "Marketing",
"Research", "Operations", "Communications"
]

ROLES = [
"Senior Engineer", "Product Designer", "Research Lead",
"Communications Manager", "Operations Director", "UX Researcher",
"Software Engineer", "Data Scientist", "Project Manager",
"Content Strategist"
]

class Command(BaseCommand):
help = "Generate fake people pages for demo"

def add_arguments(self, parser):
parser.add_argument(
'--count',
type=int,
default=50,
help='Number of people pages to generate'
)

def handle(self, *args, **options):
index = PersonIndexPage.objects.first()
if not index:
self.stdout.write(self.style.ERROR(
'No PersonIndexPage found. '
'Create one in the admin first.'
))
return

count = options['count']
for i in range(count):
first_name = fake.first_name()
last_name = fake.last_name()
person = PersonPage(
title=f"{first_name} {last_name}",
first_name=first_name,
last_name=last_name,
role=fake.random_element(ROLES),
department=fake.random_element(DEPARTMENTS),
bio=fake.paragraph(nb_sentences=5),
email=fake.company_email(),
slug=fake.unique.slug(),
)
index.add_child(instance=person)
person.save_revision().publish()
self.stdout.write(f"Created: {person.title}")

self.stdout.write(
self.style.SUCCESS(
f'Successfully created {count} people pages'
)
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
# Generated by Django 6.0.3 on 2026-03-06 04:26

import django.db.models.deletion
import wagtail.fields
from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('people', '0003_personpage_social_links'),
('wagtailcore', '0096_referenceindex_referenceindex_source_object_and_more'),
('wagtailimages', '0027_image_description'),
]

operations = [
migrations.CreateModel(
name='PersonIndexPage',
fields=[
('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')),
('intro', wagtail.fields.RichTextField(blank=True)),
],
options={
'verbose_name': 'Person Index Page',
},
bases=('wagtailcore.page',),
),
migrations.AlterModelOptions(
name='personpage',
options={'verbose_name': 'Person Page'},
),
migrations.RemoveField(
model_name='personpage',
name='body',
),
migrations.RemoveField(
model_name='personpage',
name='image',
),
migrations.RemoveField(
model_name='personpage',
name='introduction',
),
migrations.RemoveField(
model_name='personpage',
name='location',
),
migrations.RemoveField(
model_name='personpage',
name='social_links',
),
migrations.AddField(
model_name='personpage',
name='bio',
field=wagtail.fields.RichTextField(blank=True),
),
migrations.AddField(
model_name='personpage',
name='department',
field=models.CharField(blank=True, max_length=200),
),
migrations.AddField(
model_name='personpage',
name='email',
field=models.EmailField(blank=True, max_length=254),
),
migrations.AddField(
model_name='personpage',
name='first_name',
field=models.CharField(default='', max_length=100),
),
migrations.AddField(
model_name='personpage',
name='last_name',
field=models.CharField(default='', max_length=100),
),
migrations.AddField(
model_name='personpage',
name='linkedin_url',
field=models.URLField(blank=True),
),
migrations.AddField(
model_name='personpage',
name='photo',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailimages.image'),
),
migrations.AddField(
model_name='personpage',
name='role',
field=models.CharField(default='', max_length=200),
),
migrations.DeleteModel(
name='PeopleIndexPage',
),
]
Loading