Мне нужно написать миграцию 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),
]