python - 向所有用户添加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()
解决方案
如果您可以从 shell 执行此操作,则只需执行步骤 2。如果您想从迁移文件执行此操作,请执行步骤 1-3。(从外壳更容易)。
在您的终端中:运行
python manage.py make migrations app_name --empty
在您的新迁移文件中添加一个函数,该函数执行您想要为现有用户执行的工作。
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 部分旁边添加默认值。
- 在操作列表中,写入:
operations = [
migrations.RunPython(add_perms)
]
推荐阅读
- angular - 同时在同一工作区上构建 Angular 库和应用程序
- node.js - 用于 Node 的 Typescript 库作为 NPM 中的混合包
- python - 在我的本地机器上安装 pyobjc-framework-Quartz 6.2.2 失败
- android - 无法使用 React Native 应用程序将图像上传到 Django 服务器
- python - Python中的列表排序算法不运行
- laravel - 设置 laravel 项目
- java - 如果出现异常,如何停止 graphql-spqr-spring-boot-starter 打印日志?
- angular - 在可观察的 HTTP 调用中实现加载器的正确方法?
- github - 无法在 Netbeans 12 中使用 Team -> Git -> 克隆向导使用 SSH 连接到 github 存储库
- python - 在 PyQt5 应用程序中执行子进程永远不会返回