- 在您的
settings.py change the location of the migrations folder 中将django.contrib.flatpages 应用程序移至默认文件夹以外的另一个文件夹。例如:
settings.py:
MIGRATION_MODULES = {'flatpages': 'yourproject.flatpages.migrations'}
请记住,您必须在文件夹 yourproject、flatpages 和 migrations 中创建空的 __init__.py 文件,以使 Python 将这些字典视为包。 p>
执行makemigrations 管理命令将初始迁移填充到您的MIGRATION_MODULES 文件夹。它应该类似于default one。
在您的一个应用程序(最好是使用平面页面功能的应用程序)的 apps.py 中添加 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 将来向平面应用程序添加新的迁移,您将负责管理它们。我建议大家不要使用平面应用程序,无论它是否适合您当前的情况。