【问题标题】:Writing a django migration manually with setting a variable on condition通过在条件上设置变量手动编写 django 迁移
【发布时间】:2019-10-25 23:26:34
【问题描述】:

我需要编写一个 django 迁移,它根据条件更改属性值。

所以我有is_adminis_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


    【解决方案1】:

    这行得通吗?

    from django.contrib.auth.models import User
    
    for user in User.objects.all():
        if user.is_admin:
           role = 'admin'
    
    

    【讨论】:

    • 不。我找到了解决方案。将其添加到我的问题中。不过谢谢:)
    猜你喜欢
    • 1970-01-01
    • 2019-07-15
    • 2011-04-14
    • 2018-06-16
    • 1970-01-01
    • 2011-04-20
    • 2015-10-01
    • 1970-01-01
    相关资源
    最近更新 更多