【发布时间】:2019-10-25 23:26:34
【问题描述】:
我需要编写一个 django 迁移,它根据条件更改属性值。
所以我有is_admin 和is_staff 属性,现在我用新属性role 替换。
如果旧的is_admin 为真,我需要设置role = admin。
同样,如果old is_staff 为真,我需要设置role = staff。
如何使用 django 数据迁移来做到这一点?
我需要类似的东西
if is_admin:
role = "admin"
if is_staff:
role = "staff"
解决方案: 于是我在 RunPython 中找到了解决方案
def role_populator(apps, schema_editor):
User = apps.get_model("core", "User")
for inst in User.objects.all():
if inst.is_superuser:
inst.role = RoleField.superadmin
elif inst.is_staff:
inst.role = RoleField.manager
else:
if inst.agency:
inst.role = RoleField.realtor
else:
inst.role = RoleField.individual
class Migration(migrations.Migration):
dependencies = [("core", "0017_auto_20190611_1008")]
operations = [
migrations.RunPython(role_populator, reverse_code=migrations.RunPython.noop),
]
【问题讨论】:
标签: python django data-migration django-migrations