Clean up and re-generate migrations

This commit is contained in:
Warren Chen 2025-11-26 17:29:52 +09:00
parent 97ddd2dfd1
commit 2c21cca5a7
19 changed files with 142 additions and 517 deletions

View File

@ -1,36 +0,0 @@
# Generated by Django 5.2.7 on 2025-10-15 06:17
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0001_initial'),
]
operations = [
migrations.RemoveField(
model_name='navigationsettings',
name='github_url',
),
migrations.RemoveField(
model_name='navigationsettings',
name='mastodon_url',
),
migrations.AddField(
model_name='navigationsettings',
name='facebook_url',
field=models.URLField(blank=True, verbose_name='Facebook URL'),
),
migrations.AddField(
model_name='navigationsettings',
name='instagram_url',
field=models.URLField(blank=True, verbose_name='Instagram URL'),
),
migrations.AddField(
model_name='navigationsettings',
name='thread_url',
field=models.URLField(blank=True, verbose_name='Thread URL'),
),
]

View File

@ -0,0 +1,59 @@
# Generated by Django 5.2.7 on 2025-11-26 08:11
import django.db.models.deletion
import wagtail.fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0001_initial'),
('wagtailimages', '0027_image_description'),
]
operations = [
migrations.CreateModel(
name='SocialMediaSettings',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('links', wagtail.fields.StreamField([('link', 2)], block_lookup={0: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('facebook', 'Facebook'), ('twitter', 'Twitter'), ('instagram', 'Instagram'), ('thread', 'Thread'), ('linkedin', 'LinkedIn'), ('youtube', 'YouTube')]}), 1: ('wagtail.blocks.URLBlock', (), {}), 2: ('wagtail.blocks.StructBlock', [[('platform', 0), ('url', 1)]], {})})),
],
options={
'abstract': False,
},
),
migrations.AlterModelOptions(
name='navigationsettings',
options={'verbose_name': 'Footer Navigation'},
),
migrations.RemoveField(
model_name='navigationsettings',
name='github_url',
),
migrations.RemoveField(
model_name='navigationsettings',
name='linkedin_url',
),
migrations.RemoveField(
model_name='navigationsettings',
name='mastodon_url',
),
migrations.AddField(
model_name='navigationsettings',
name='footer_links',
field=wagtail.fields.StreamField([('section', 5)], blank=True, block_lookup={0: ('wagtail.blocks.CharBlock', (), {'required': False}), 1: ('wagtail.blocks.CharBlock', (), {}), 2: ('wagtail.blocks.URLBlock', (), {}), 3: ('wagtail.blocks.StructBlock', [[('label', 1), ('url', 2)]], {}), 4: ('wagtail.blocks.ListBlock', (3,), {}), 5: ('wagtail.blocks.StructBlock', [[('title', 0), ('links', 4)]], {})}, null=True),
),
migrations.CreateModel(
name='HeaderSettings',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('site_name', models.CharField(blank=True, max_length=255)),
('extra_links', wagtail.fields.StreamField([('link', 2)], blank=True, block_lookup={0: ('wagtail.blocks.CharBlock', (), {}), 1: ('wagtail.blocks.URLBlock', (), {}), 2: ('wagtail.blocks.StructBlock', [[('label', 0), ('url', 1)]], {})}, null=True)),
('logo', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailimages.image')),
],
options={
'verbose_name': 'Header Settings',
},
),
]

View File

@ -1,24 +0,0 @@
# Generated by Django 5.2.7 on 2025-10-15 06:48
import wagtail.fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0002_remove_navigationsettings_github_url_and_more'),
]
operations = [
migrations.CreateModel(
name='SocialMediaSettings',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('links', wagtail.fields.StreamField([('link', 2)], block_lookup={0: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('twitter', 'Twitter'), ('instagram', 'Instagram'), ('linkedin', 'LinkedIn'), ('youtube', 'YouTube')]}), 1: ('wagtail.blocks.URLBlock', (), {}), 2: ('wagtail.blocks.StructBlock', [[('platform', 0), ('url', 1)]], {})})),
],
options={
'abstract': False,
},
),
]

View File

@ -1,44 +0,0 @@
# Generated by Django 5.2.7 on 2025-10-15 08:49
import wagtail.fields
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('base', '0003_socialmediasettings'),
]
operations = [
migrations.AlterModelOptions(
name='navigationsettings',
options={'verbose_name': 'Footer Navigation'},
),
migrations.RemoveField(
model_name='navigationsettings',
name='facebook_url',
),
migrations.RemoveField(
model_name='navigationsettings',
name='instagram_url',
),
migrations.RemoveField(
model_name='navigationsettings',
name='linkedin_url',
),
migrations.RemoveField(
model_name='navigationsettings',
name='thread_url',
),
migrations.AddField(
model_name='navigationsettings',
name='footer_links',
field=wagtail.fields.StreamField([('section', 5)], blank=True, block_lookup={0: ('wagtail.blocks.CharBlock', (), {'required': False}), 1: ('wagtail.blocks.CharBlock', (), {}), 2: ('wagtail.blocks.URLBlock', (), {}), 3: ('wagtail.blocks.StructBlock', [[('label', 1), ('url', 2)]], {}), 4: ('wagtail.blocks.ListBlock', (3,), {}), 5: ('wagtail.blocks.StructBlock', [[('title', 0), ('links', 4)]], {})}, null=True),
),
migrations.AlterField(
model_name='socialmediasettings',
name='links',
field=wagtail.fields.StreamField([('link', 2)], block_lookup={0: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('facebook', 'Facebook'), ('twitter', 'Twitter'), ('instagram', 'Instagram'), ('thread', 'Thread'), ('linkedin', 'LinkedIn'), ('youtube', 'YouTube')]}), 1: ('wagtail.blocks.URLBlock', (), {}), 2: ('wagtail.blocks.StructBlock', [[('platform', 0), ('url', 1)]], {})}),
),
]

View File

@ -1,28 +0,0 @@
# Generated by Django 5.2.7 on 2025-10-16 04:59
import django.db.models.deletion
import wagtail.fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0004_alter_navigationsettings_options_and_more'),
('wagtailimages', '0027_image_description'),
]
operations = [
migrations.CreateModel(
name='HeaderSettring',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('site_name', models.CharField(blank=True, max_length=255)),
('extra_links', wagtail.fields.StreamField([('link', 2)], blank=True, block_lookup={0: ('wagtail.blocks.CharBlock', (), {}), 1: ('wagtail.blocks.URLBlock', (), {}), 2: ('wagtail.blocks.StructBlock', [[('label', 0), ('url', 1)]], {})}, null=True)),
('logo', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailimages.image')),
],
options={
'verbose_name': 'Header Settings',
},
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 5.2.7 on 2025-10-16 05:11
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('base', '0005_headersettring'),
('wagtailimages', '0027_image_description'),
]
operations = [
migrations.RenameModel(
old_name='HeaderSettring',
new_name='HeaderSettrings',
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 5.2.7 on 2025-10-16 05:12
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('base', '0006_rename_headersettring_headersettrings'),
('wagtailimages', '0027_image_description'),
]
operations = [
migrations.RenameModel(
old_name='HeaderSettrings',
new_name='HeaderSettings',
),
]

View File

@ -1,39 +0,0 @@
# Generated by Django 5.2.7 on 2025-10-17 04:15
import django.db.models.deletion
import wagtail.fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('home', '0002_create_homepage'),
('wagtailcore', '0095_groupsitepermission'),
]
operations = [
migrations.CreateModel(
name='ArticlePage',
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')),
('date', models.DateField(verbose_name='Published date')),
('intro', models.CharField(blank=True, max_length=250)),
('body', wagtail.fields.StreamField([('heading', 0), ('paragraph', 1), ('image', 2), ('embed', 3)], block_lookup={0: ('wagtail.blocks.CharBlock', (), {'form_classname': 'full title'}), 1: ('wagtail.blocks.RichTextBlock', (), {'features': ['bold', 'italic', 'link']}), 2: ('wagtail.images.blocks.ImageChooserBlock', (), {}), 3: ('wagtail.embeds.blocks.EmbedBlock', (), {})})),
],
options={
'abstract': False,
},
bases=('wagtailcore.page',),
),
migrations.CreateModel(
name='CategoryPage',
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')),
],
options={
'abstract': False,
},
bases=('wagtailcore.page',),
),
]

View File

@ -0,0 +1,83 @@
# Generated by Django 5.2.7 on 2025-11-26 08:11
import django.db.models.deletion
import home.models
import modelcluster.contrib.taggit
import modelcluster.fields
import wagtail.fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('home', '0002_create_homepage'),
('taggit', '0006_rename_taggeditem_content_type_object_id_taggit_tagg_content_8fc721_idx'),
('wagtailcore', '0095_groupsitepermission'),
('wagtailimages', '0027_image_description'),
]
operations = [
migrations.CreateModel(
name='CategoryPage',
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')),
],
options={
'abstract': False,
},
bases=('wagtailcore.page', home.models.CategoryMixin),
),
migrations.CreateModel(
name='LatestPage',
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')),
],
options={
'abstract': False,
},
bases=('wagtailcore.page', home.models.CategoryMixin),
),
migrations.CreateModel(
name='TrendingPage',
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')),
],
options={
'abstract': False,
},
bases=('wagtailcore.page', home.models.CategoryMixin),
),
migrations.CreateModel(
name='ArticlePage',
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')),
('date', models.DateTimeField(verbose_name='Published date')),
('intro', models.CharField(blank=True, max_length=250)),
('body', wagtail.fields.StreamField([('heading', 0), ('paragraph', 1), ('image', 2), ('embed', 3), ('hr', 4), ('html', 5)], block_lookup={0: ('home.blocks.H2HeadingBlock', (), {'form_classname': 'full title'}), 1: ('wagtail.blocks.RichTextBlock', (), {'features': ['bold', 'italic', 'link']}), 2: ('wagtail.images.blocks.ImageChooserBlock', (), {}), 3: ('home.blocks.ValidatingEmbedBlock', (), {}), 4: ('home.blocks.HorizontalRuleBlock', (), {}), 5: ('wagtail.blocks.RawHTMLBlock', (), {'help_text': '僅限信任來源的 blockquote/iframe 原始碼'})})),
('trending', models.BooleanField(default=False, help_text='在熱門區塊顯示', verbose_name='Trending')),
('banner_image', models.ForeignKey(blank=True, help_text='文章內文橫幅圖片', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailimages.image')),
('cover_image', models.ForeignKey(blank=True, help_text='列表封面圖', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailimages.image')),
],
options={
'abstract': False,
},
bases=('wagtailcore.page',),
),
migrations.CreateModel(
name='ArticlePageTag',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('content_object', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='tagged_items', to='home.articlepage')),
('tag', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s_items', to='taggit.tag')),
],
options={
'abstract': False,
},
),
migrations.AddField(
model_name='articlepage',
name='tags',
field=modelcluster.contrib.taggit.ClusterTaggableManager(blank=True, help_text='A comma-separated list of tags.', through='home.ArticlePageTag', to='taggit.Tag', verbose_name='Tags'),
),
]

View File

@ -1,35 +0,0 @@
# Generated by Django 5.2.7 on 2025-10-17 07:28
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('home', '0003_articlepage_categorypage'),
('wagtailcore', '0095_groupsitepermission'),
]
operations = [
migrations.CreateModel(
name='LatestPage',
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')),
],
options={
'abstract': False,
},
bases=('wagtailcore.page',),
),
migrations.CreateModel(
name='RecommandedPage',
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')),
],
options={
'abstract': False,
},
bases=('wagtailcore.page',),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 5.2.7 on 2025-10-17 07:36
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('home', '0004_latestpage_recommandedpage'),
('wagtailcore', '0095_groupsitepermission'),
]
operations = [
migrations.RenameModel(
old_name='RecommandedPage',
new_name='RecommendedPage',
),
]

View File

@ -1,25 +0,0 @@
# Generated by Django 5.2.7 on 2025-10-17 07:50
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('home', '0005_rename_recommandedpage_recommendedpage'),
('wagtailimages', '0027_image_description'),
]
operations = [
migrations.AddField(
model_name='articlepage',
name='cover_image',
field=models.ForeignKey(blank=True, help_text='文章列表與分享用的首圖', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailimages.image'),
),
migrations.AddField(
model_name='articlepage',
name='recommended',
field=models.BooleanField(default=False, help_text='在推薦清單顯示'),
),
]

View File

@ -1,26 +0,0 @@
# Generated by Django 5.2.7 on 2025-10-29 06:25
import django.db.models.deletion
import wagtail.fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('home', '0006_articlepage_cover_image_articlepage_recommended'),
('wagtailimages', '0027_image_description'),
]
operations = [
migrations.AddField(
model_name='articlepage',
name='banner_image',
field=models.ForeignKey(blank=True, help_text='文章頁頂部橫幅圖片', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailimages.image'),
),
migrations.AlterField(
model_name='articlepage',
name='body',
field=wagtail.fields.StreamField([('heading', 0), ('paragraph', 1), ('image', 2), ('embed', 3), ('hr', 4), ('html', 5)], block_lookup={0: ('home.blocks.H2HeadingBlock', (), {'form_classname': 'full title'}), 1: ('wagtail.blocks.RichTextBlock', (), {'features': ['bold', 'italic', 'link', 'ol', 'ul']}), 2: ('wagtail.images.blocks.ImageChooserBlock', (), {}), 3: ('home.blocks.ValidatingEmbedBlock', (), {}), 4: ('home.blocks.HorizontalRuleBlock', (), {}), 5: ('wagtail.blocks.RawHTMLBlock', (), {'help_text': '僅限信任來源的 blockquote/iframe 原始碼'})}),
),
]

View File

@ -1,36 +0,0 @@
# Generated by Django 5.2.7 on 2025-10-29 09:33
import django.db.models.deletion
import wagtail.fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('home', '0007_articlepage_banner_image_alter_articlepage_body'),
('wagtailimages', '0027_image_description'),
]
operations = [
migrations.AlterField(
model_name='articlepage',
name='banner_image',
field=models.ForeignKey(blank=True, help_text='文章內文橫幅圖片', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailimages.image'),
),
migrations.AlterField(
model_name='articlepage',
name='body',
field=wagtail.fields.StreamField([('heading', 0), ('paragraph', 1), ('image', 2), ('embed', 3), ('hr', 4), ('html', 5)], block_lookup={0: ('home.blocks.H2HeadingBlock', (), {'form_classname': 'full title'}), 1: ('wagtail.blocks.RichTextBlock', (), {'features': ['bold', 'italic', 'link']}), 2: ('wagtail.images.blocks.ImageChooserBlock', (), {}), 3: ('home.blocks.ValidatingEmbedBlock', (), {}), 4: ('home.blocks.HorizontalRuleBlock', (), {}), 5: ('wagtail.blocks.RawHTMLBlock', (), {'help_text': '僅限信任來源的 blockquote/iframe 原始碼'})}),
),
migrations.AlterField(
model_name='articlepage',
name='cover_image',
field=models.ForeignKey(blank=True, help_text='列表封面圖', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailimages.image'),
),
migrations.AlterField(
model_name='articlepage',
name='recommended',
field=models.BooleanField(default=False, help_text='在推薦區塊顯示'),
),
]

View File

@ -1,59 +0,0 @@
import django.db.models.deletion
import modelcluster.contrib.taggit
import modelcluster.fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("home", "0008_alter_articlepage_banner_image_and_more"),
("taggit", "0004_alter_taggeditem_content_type_alter_taggeditem_tag"),
]
operations = [
migrations.CreateModel(
name="ArticlePageTag",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
(
"content_object",
modelcluster.fields.ParentalKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="tagged_items",
to="home.articlepage",
),
),
(
"tag",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="home_articlepagetag_items",
to="taggit.tag",
),
),
],
options={
"abstract": False,
},
),
migrations.AddField(
model_name="articlepage",
name="tags",
field=modelcluster.contrib.taggit.ClusterTaggableManager(
blank=True,
help_text="A comma-separated list of tags.",
through="home.ArticlePageTag",
to="taggit.Tag",
verbose_name="Tags",
),
),
]

View File

@ -1,20 +0,0 @@
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("home", "0009_articlepagetag_articlepage_tags"),
]
operations = [
migrations.AlterField(
model_name="articlepage",
name="recommended",
field=models.BooleanField(
default=False,
help_text="在熱門區塊顯示",
verbose_name="Trending",
),
),
]

View File

@ -1,15 +0,0 @@
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("home", "0010_alter_articlepage_recommended"),
]
operations = [
migrations.RenameModel(
old_name="RecommendedPage",
new_name="TrendingPage",
),
]

View File

@ -1,30 +0,0 @@
# Generated by Django 5.2.7 on 2025-11-06 04:04
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('home', '0011_rename_recommendedpage_trendingpage'),
('taggit', '0006_rename_taggeditem_content_type_object_id_taggit_tagg_content_8fc721_idx'),
]
operations = [
migrations.RenameField(
model_name='articlepage',
old_name='recommended',
new_name='trending',
),
migrations.AlterField(
model_name='articlepagetag',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
),
migrations.AlterField(
model_name='articlepagetag',
name='tag',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s_items', to='taggit.tag'),
),
]

View File

@ -1,46 +0,0 @@
# Generated by Django 5.2.7 on 2025-11-10 05:37
import datetime as dt
from django.conf import settings
from django.db import migrations, models
from django.utils import timezone
def normalize_article_dates(apps, schema_editor):
ArticlePage = apps.get_model("home", "ArticlePage")
for page in ArticlePage.objects.all():
if page.date is None:
continue
value = page.date
if isinstance(value, dt.datetime):
base = value
elif isinstance(value, dt.date):
base = dt.datetime.combine(value, dt.time.min)
else:
continue
if settings.USE_TZ and timezone.is_naive(base):
base = timezone.make_aware(base, timezone.get_default_timezone())
normalized = base.replace(hour=0, minute=0, second=0, microsecond=0)
if normalized != page.date:
ArticlePage.objects.filter(pk=page.pk).update(date=normalized)
class Migration(migrations.Migration):
dependencies = [
('home', '0012_rename_recommended_articlepage_trending_and_more'),
]
operations = [
migrations.AlterField(
model_name='articlepage',
name='date',
field=models.DateTimeField(verbose_name='Published date'),
),
migrations.RunPython(normalize_article_dates, migrations.RunPython.noop),
]