首页 > 解决方案 > 向所有用户添加onetoone字段,django

问题描述

在项目进行中,我面临着需要扩展我的用户模型的事实。由于目前创建自定义模型非常有问题,所以我决定使用onetoone字段,一切都成功了,但是有一个问题。我想为现有用户添加与我的用户模型代理的关系并为他们设置权限。我怎样才能做到这一点?我需要为所有用户设置起始值

class UserPermission(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    start = models.BooleanField(default=True)
    professional = models.BooleanField()
    team = models.BooleanField()
    last_update = models.DateTimeField()

标签: pythondjangopostgresqldjango-rest-framework

解决方案


如果您可以从 shell 执行此操作,则只需执行步骤 2。如果您想从迁移文件执行此操作,请执行步骤 1-3。(从外壳更容易)。

  1. 在您的终端中:运行python manage.py make migrations app_name --empty

  2. 在您的新迁移文件中添加一个函数,该函数执行您想要为现有用户执行的工作。

def add_perms(apps, schema_editor):
    UserPermissions.objects.bulk_create([UserPermissions(user_id=user_id) for user_id in User.objects.values_list("id", flat=True)], ignore_conflicts=True)

如果您从 shell 执行此操作,则不需要该函数本身。它运行什么。UserPermissions(user_id=user_id)只是一个基础,您应该在该 user_id 部分旁边添加默认值。

  1. 在操作列表中,写入:
operations = [
    migrations.RunPython(add_perms)
]

推荐阅读