【发布时间】:2016-01-17 21:55:03
【问题描述】:
我有一个现有的 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 和 UserSettings)的 django-cms 模型没有更新为对新自定义用户表的外键引用。
django-cms documentation 表示通常建议在项目开始时添加自定义用户模型,但我现在处于项目中间,非常希望避免删除我的 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') 建议它在我的自定义应用程序而不是 cms 应用程序中查找 PageUser 模型。如何将这些迁移应用到 cms 模型?
【问题讨论】:
-
抱歉,我以为您在谈论 数据迁移。对于架构迁移,您必须在 cms 中创建自己的迁移。另请参阅小组中的 Tim Graham:groups.google.com/d/msg/django-cms-developers/uoJVqR-fduw/…
标签: django django-cms django-custom-user