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()