Clean up and re-generate migrations
This commit is contained in:
parent
97ddd2dfd1
commit
2c21cca5a7
@ -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'),
|
|
||||||
),
|
|
||||||
]
|
|
||||||
@ -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',
|
||||||
|
},
|
||||||
|
),
|
||||||
|
]
|
||||||
@ -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,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]
|
|
||||||
@ -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)]], {})}),
|
|
||||||
),
|
|
||||||
]
|
|
||||||
@ -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',
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]
|
|
||||||
@ -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',
|
|
||||||
),
|
|
||||||
]
|
|
||||||
@ -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',
|
|
||||||
),
|
|
||||||
]
|
|
||||||
@ -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',),
|
|
||||||
),
|
|
||||||
]
|
|
||||||
@ -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'),
|
||||||
|
),
|
||||||
|
]
|
||||||
@ -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',),
|
|
||||||
),
|
|
||||||
]
|
|
||||||
@ -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',
|
|
||||||
),
|
|
||||||
]
|
|
||||||
@ -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='在推薦清單顯示'),
|
|
||||||
),
|
|
||||||
]
|
|
||||||
@ -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 原始碼'})}),
|
|
||||||
),
|
|
||||||
]
|
|
||||||
@ -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='在推薦區塊顯示'),
|
|
||||||
),
|
|
||||||
]
|
|
||||||
@ -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",
|
|
||||||
),
|
|
||||||
),
|
|
||||||
]
|
|
||||||
@ -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",
|
|
||||||
),
|
|
||||||
),
|
|
||||||
]
|
|
||||||
@ -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",
|
|
||||||
),
|
|
||||||
]
|
|
||||||
@ -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'),
|
|
||||||
),
|
|
||||||
]
|
|
||||||
@ -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),
|
|
||||||
]
|
|
||||||
Loading…
x
Reference in New Issue
Block a user