首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Django:如何在使用OneToOne关系的新模型的用户字段中自动填充先前的用户

Django:如何在使用OneToOne关系的新模型的用户字段中自动填充先前的用户
EN

Stack Overflow用户
提问于 2022-11-01 04:23:42
回答 2查看 12关注 0票数 0

我有一个传统的项目,它将用户存储在auth_user django表中。后来,我决定实现一个profiles应用程序。views.py代码如下

代码语言:javascript
运行
AI代码解释
复制
class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)

我做makemigrationsmigrate。该表是用空数据创建的,也就是说,auth_user中存在的以前的用户没有在profiles_profile表中填充。如何在新表中填充旧数据?谢谢

EN

回答 2

Stack Overflow用户

发布于 2022-11-01 04:44:22

从用户模型中获取所有对象并使用shell保存到配置文件模型中。这是最简单的方法。

代码语言:javascript
运行
AI代码解释
复制
python manage.shell

然后导入模型用户和配置文件。

代码语言:javascript
运行
AI代码解释
复制
for user in User.objects.all():
    profile=Profile()
    profile.user=user
    profile.save()
票数 0
EN

Stack Overflow用户

发布于 2022-11-01 06:32:02

这就是方法:在终端类型中:

代码语言:javascript
运行
AI代码解释
复制
python manage.py makemigrations --empty profiles

我使用配置文件,因为这是我的app_name。这将在应用程序的迁移文件夹中创建一个文件,例如,0005_auto_20221101_1518.py

在此文件中,键入以下内容:

代码语言:javascript
运行
AI代码解释
复制
from django.db import migrations
from django.conf import settings

def make_profiles(apps, schema_editor):
    User = apps.get_model(settings.AUTH_USER_MODEL)
    Profile = apps.get_model('profiles', 'Profile')
    profiles = [Profile(user=user) for user in User.objects.filter(profile=None)]
    Profile.objects.bulk_create(profiles)

class Migration(migrations.Migration):

    dependencies = [
        ('profiles', '0004_merge_20221101_1507'),
    ]

    operations = [
        migrations.RunPython(make_profiles),
    ]

好的,在这里,你可以很容易地弄清楚。在我的例子中,概要文件是模型,概要文件是app_name。0004_merge_20221101_1507对应于之前的迁移文件。这是自动设置的,所以不用担心,但是如果您使用迁移文件,那么这个文件应该是list...usually中的前一个文件,按0001.,0002,...0003,0004等顺序确定。

之后只有makemigrationsmigrate。就这样..。但是,如果您的新表中有一个唯一的字段,例如基于用户的first_name和last_name的段塞,该怎么办?您可能有一个问题,因为两个用户可能共享相同的弹格字段。在这种情况下,迁移将显示一个错误。解决这个问题的方法很多,there....but不在这个答案的范围之内。干杯

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74275893

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文