我有一个现有的 django-cms 版本。3.1.3 项目,我想用django-custom-user中的模型替换默认的 django User 模型(将电子邮件作为我的用户的用户名)。我已将该custom_user
应用程序添加到我的INSTALLED_APPS
和设置AUTH_USER_MODEL = 'custom_user.EmailUser'
中。最后我应用了迁移。
在我的自定义模型中,一切似乎都运行良好,但是引用auth_user
表(GlobalPagePermission
和PagePermission,
PageUser
)的 django-cms 模型UserSettings
没有更新为具有对新自定义用户表的外键引用。
django-cms 文档说通常建议在项目开始时添加自定义用户模型,但是我在这里,在项目中间,非常希望避免删除我的 cms 模型(带有数据) 使其工作。
如果我在一个项目的开始,并且在迁移 django-cms 模型之前添加了自定义用户模型,那么 django-cms 模型实际上会获得对自定义用户模型表的引用而不是默认的引用吗?
我有什么方法可以为 django-cms 模型进行迁移,所以他们使用新的自定义用户模型而不是默认用户模型?
更新
我试图实现 yakky 的建议:
from __future__ import unicode_literals
from django.conf import settings
from django.db import models, migrations
import django.db.models.deletion
from django.utils.translation import ugettext_lazy as _
def up(apps, schema_editor):
PageUser = apps.get_model("cms", "PageUser")
db_alias = schema_editor.connection.alias
for pu in PageUser.objects.all():
pu['emailuser_ptr_id'] = pu['user_ptr_id']
pu.save()
def down(apps, schema_editor):
PageUser = apps.get_model("cms", "PageUser")
db_alias = schema_editor.connection.alias
for pu in PageUser.objects.all():
pu['user_ptr_id'] = pu['emailuser_ptr_id']
pu.save()
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
(‘myapp’, ‘previous-migration’),
]
operations = [
migrations.RenameField(
model_name='PageUser',
old_name='user_ptr_id',
new_name='user_ptr_id_old',
),
migrations.AddField(
model_name='PageUser',
name='emailuser_ptr_id',
field=models.ForeignKey(null=True, to=settings.AUTH_USER_MODEL, verbose_name=_('user'), blank=True),
preserve_default=True,
),
migrations.RunPython(up, down),
migrations.RemoveField(
model_name='PageUser',
name='user_ptr_id_old',
),
]
它未能KeyError: ('myapp', u'pageuser')
建议它PageUser
在我的自定义应用程序而不是 cms 应用程序中查找模型。如何将这些迁移应用到 cms 模型?