【发布时间】:2020-02-06 17:16:42
【问题描述】:
我有如下数据迁移,我想使用 CustomUser 的 create_user 方法,获取已创建用户的实例,并使用此实例创建 Partner 模型的实例。 值得一提的是,我有一个 Partner 模型,它与 CustomUser 是一对一的关系。 我有两个选择:
# Option One:
def populate_database_create_partner(apps, schema_editor):
Partner = apps.get_model('partners', 'Partner')
CustomUser.objects.create_user(
id=33,
email='test_email@email.com',
password='password',
first_name='test_first_name',
last_name="test_last_name",
is_partner=True,
)
u = CustomUser.objects.get(id=33)
partner = Partner.objects.create(user=u, )
class Migration(migrations.Migration):
dependencies = [
('accounts', '0006_populate_database_createsuperuser'),
]
operations = [
migrations.RunPython(populate_database_create_partner),
]
在选项一中,我看到了这个错误:
ValueError: Cannot assign "<CustomUser: test_email@email.com>": "Partner.user" must be a "CustomUser" instance.
然后我测试一下:
# Option Two:
def populate_database_create_partner(apps, schema_editor):
Partner = apps.get_model('partners', 'Partner')
CustomUser = apps.get_model('accounts', 'CustomUser')
CustomUser.objects.create_user(
id=33,
email='test_email@email.com',
password='password',
first_name='test_first_name',
last_name="test_last_name",
is_partner=True,
)
u = CustomUser.objects.get(id=33)
partner = Partner.objects.create(user=u, )
class Migration(migrations.Migration):
dependencies = [
('accounts', '0006_populate_database_createsuperuser'),
]
operations = [
migrations.RunPython(populate_database_create_partner),
]
我看到这个错误:
CustomUser.objects.create_user(
AttributeError: 'Manager' object has no attribute 'create_user'
create_user 方法不起作用。
如果我不使用 create_user 方法而只使用CustomUser.objects.create(...),我将无法在此处设置密码。
【问题讨论】:
-
你也可以在第一个解决方案中尝试
partner = Partner.objects.create(user_id=33, ) -
这样说,如果我通过import来使用模型,就可以使用它的方法了。如果我通过apps.get_model导入它们,那么方法不起作用
-
也许你是对的,尝试通过
id设置用户 -
我遇到了另一个问题。我的合作伙伴模型有一个自定义保存方法,可以创建一个 slug。由于同样的问题,没有创建蛞蝓!方法不行!!!
-
我需要在迁移文件中复制它
标签: django migration data-migration migrate django-custom-user