Написание миграции django вручную с установкой переменной по условию - PullRequest
0 голосов
/ 11 июня 2019

Мне нужно написать миграцию django, которая изменяет значение атрибута в зависимости от условия.

Итак, у меня есть атрибуты is_admin и is_staff, и теперь я заменяю их новым атрибутом role.

Мне нужно установить role = admin, если старый is_admin был истинным. Точно так же мне нужно установить role = staff, если old is_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),
    ]

1 Ответ

0 голосов
/ 11 июня 2019

будет ли это работать?

from django.contrib.auth.models import User

for user in User.objects.all():
    if user.is_admin:
       role = 'admin'

...