Python 修改数据库中已存在的Django中的用户实例
假设我的数据库中已有用户实例。然后,我刚刚在我的应用程序中引入了一个新模型:Python 修改数据库中已存在的Django中的用户实例,python,django,Python,Django,假设我的数据库中已有用户实例。然后,我刚刚在我的应用程序中引入了一个新模型: class UserProfile(models.Model): user = models.OneToOneField(User, related_name='profile') nickname = models.CharField(max_length=30, blank=True) 我想为每个用户创建一个UserProfile实例。我知道信号可以处理类似User().save()的事情。但是,
class UserProfile(models.Model):
user = models.OneToOneField(User, related_name='profile')
nickname = models.CharField(max_length=30, blank=True)
我想为每个用户创建一个UserProfile实例。我知道信号可以处理类似User().save()的事情。但是,如何处理数据库中已有的用户
目前我在views.py中处理它:
try:
user.profile.nickname = 'my_nickname'
except:
profile = UserProfile()
profile.user = user
profile.nickname = 'my_nickname'
profile.save()
但这使得观点相当长。有更好的方法吗?对于数据库中已有的用户,可以在django shell上运行脚本
python manage.py shell
然后:
只是一个旁注:像从.models导入*这样的疯狂导入是一个糟糕的做法,但我这样做只是为了举例说明,而且我不知道你的appname。因此,请从相应的应用程序中导入适当的模型
希望这对您有所帮助。您需要进行自定义数据迁移,并查找没有配置文件的用户。谢谢Shubhanshu!有没有办法不用在shell中写下这些代码?类似于python myfile.py
的东西,而不是必须键入python
然后逐行写下代码?编辑:在这里找到答案。显然,这不是标准做法!在shell中进行迁移是一个糟糕的想法,如果您有一个适当的开发设置,那么不仅您团队中的每个人都需要这样做,而且您还需要在所有服务器上这样做。@Sayse您提到了自定义迁移,但是我可以知道如何进行吗?我对Django比较陌生,除了python manage.py makemigrations
和python manage.py migrate
之外,我对迁移不太了解。谢谢@艾琳-
>>from .models import *
>>from django.contrib.auth.models import User
>>users_without_profile = User.objects.filter(profile__isnull=True)
>>for user in users_without_profile:
....user.profile.nickname = 'your_choice_of_nickname'
....user.save()