- アプリ
settings.py
の移行フォルダーの場所をデフォルト以外のフォルダーに変更します。django.contrib.flatpages
例えば:
settings.py
:
MIGRATION_MODULES = {'flatpages': 'yourproject.flatpages.migrations'}
__init__.py
フォルダー内に空のファイルyourproject
をflatpages
作成し、それらの辞書をパッケージとして扱う必要があることに注意してmigrations
くださいPython
。
管理コマンドを実行してmakemigrations
、最初の移行をMIGRATION_MODULES
フォルダーに入力します。デフォルトのものと同じように見えるはずです。
apps.py
アプリの 1 つ (できれば flatpages 機能を使用するアプリ)内に、oggy のclass_prepared
ソリューションを追加します。
apps.py
:
from django.apps import AppConfig
from django.db.models.signals import class_prepared
from django.db import models
def alter_flatpages(sender, **kwargs):
if sender.__module__ == 'django.contrib.flatpages.models' and sender.__name__ == 'FlatPage':
meta_description = models.CharField(max_length=255, blank=True, null=True)
meta_description.contribute_to_class(sender, 'meta_description')
class TexteConfig(AppConfig):
name = 'marlene.texte'
def __init__(self, app_name, app_module):
super().__init__(app_name, app_module)
class_prepared.connect(alter_flatpages)
再度実行して、別のマイグレーションを追加してくださいmakemigrations
。今回はCharField
meta_description
をモデルに追加しました。migrate
変更をデータベースに適用します。
次を変更しFlatPageAdmin
ます。
admin.py
:
from django.contrib.flatpages.admin import FlatPageAdmin
from django.contrib.flatpages.models import FlatPage
class MarleneFlatPageAdmin(FlatPageAdmin):
fieldsets = (
(None, {'fields': ('url', 'title', 'content', 'meta_description', 'sites')}),
(_('Advanced options'), {
'classes': ('collapse',),
'fields': ('registration_required', 'template_name'),
}),
)
admin.site.unregister(FlatPage)
admin.site.register(FlatPage, MarleneFlatPageAdmin)
このソリューションの最大の欠点はDjango
、将来フラットページ アプリに新しい移行を追加する場合、それらを管理する責任があることです。現在の状況に適していると思われる場合でも、フラットページアプリを使用しないことをお勧めします.