Django 2.1 如何在迁移中创建用户
Django 2.1 how do I create a user in a migration
我正在尝试添加新用户,然后将其关联到现有记录的子集。
例如,假设我有这个应用模型:
class Foo(Model):
user = model.ForeignKey(User, default=None, on_delete=models.CASCADE)
在我的迁移中我有:
from django.contrib.auth.models import User
def add_user(apps, schema_editor):
anon = User.objects.create_user(username='anonymous')
anon.save()
Foo = apps.get_model('myapp', 'Foo')
foo_to_change = Foo.objects.filter(user_id=1)
for f in foo_to_change:
f.user = anon
f.save()
当我 运行 这个时,我得到这个错误:
ValueError: Cannot assign "<User: anonymous>": "Foo.user" must be a "User" instance.
我认为问题可能出在我直接使用用户模型,而文档说不要这样做。
所以我将顶部更改为:
User = apps.get_model('auth', 'User')
anon = User.objects.create_user(username='anonymous')
anon.save()
现在我得到一个不同的错误:
AttributeError: type object 'User' has no attribute 'normalize_username'
我做错了什么?如何在数据迁移中添加新用户?
编辑:我使用 sqlite 作为数据库
您可以这样做:
def add_user(apps, schema_editor):
apps.get_model('myapp', 'Foo').objects.filter(user_id=1).update(
user=apps.get_model('auth', 'User').objects.create_user(username='anonymous')
)
这是有效的,因为在这种情况下 "no type is checked",查询将使用对数据库中条目的引用:用户的 ID。
我正在尝试添加新用户,然后将其关联到现有记录的子集。
例如,假设我有这个应用模型:
class Foo(Model):
user = model.ForeignKey(User, default=None, on_delete=models.CASCADE)
在我的迁移中我有:
from django.contrib.auth.models import User
def add_user(apps, schema_editor):
anon = User.objects.create_user(username='anonymous')
anon.save()
Foo = apps.get_model('myapp', 'Foo')
foo_to_change = Foo.objects.filter(user_id=1)
for f in foo_to_change:
f.user = anon
f.save()
当我 运行 这个时,我得到这个错误:
ValueError: Cannot assign "<User: anonymous>": "Foo.user" must be a "User" instance.
我认为问题可能出在我直接使用用户模型,而文档说不要这样做。 所以我将顶部更改为:
User = apps.get_model('auth', 'User')
anon = User.objects.create_user(username='anonymous')
anon.save()
现在我得到一个不同的错误:
AttributeError: type object 'User' has no attribute 'normalize_username'
我做错了什么?如何在数据迁移中添加新用户?
编辑:我使用 sqlite 作为数据库
您可以这样做:
def add_user(apps, schema_editor):
apps.get_model('myapp', 'Foo').objects.filter(user_id=1).update(
user=apps.get_model('auth', 'User').objects.create_user(username='anonymous')
)
这是有效的,因为在这种情况下 "no type is checked",查询将使用对数据库中条目的引用:用户的 ID。