"Объект не имеет атрибута" при выполнении RunPython в миграции django
Я пытаюсь выполнить эту операцию:
def apply_func(apps, schema_editor):
User = apps.get_model("accounts", "User")
for user in User.objects.all():
if user.is_two_fa_enabled:
user.is_verified = True
user.save()
class Migration(migrations.Migration):
operations = [
migrations.AddField(
model_name='user',
name='is_verified',
field=models.BooleanField(default=False),
),
migrations.RunPython(apply_func)
]
но я понятия не имею, почему я получаю такую ошибку AttributeError: 'User' object has no attribute 'is_two_fa_enabled'
когда я хочу мигрировать.
class User(AbstractBaseUser, PermissionsMixin):
is_verified = models.BooleanField(default=False)
two_fa_type = models.CharField(choices=TwoFaTypes.choices, default=TwoFaTypes.SMS.value, max_length=32, null=True)
@property
def is_two_fa_enabled(self):
return bool(self.two_fa_type)
Могли бы вы объяснить мне, что я делаю неправильно?
Историческая модель не имеет свойств, определенных в классе, поэтому is_two_fa_enabled
не может быть использована.
def apply_func(apps, schema_editor):
User = apps.get_model('accounts', 'User')
for user in User.objects.all():
if user.two_fa_type:
user.is_verified = True
user.save()
или более эффективно:
from django.db.models import Q
def apply_func(apps, schema_editor):
User = apps.get_model('accounts', 'User')
User.objects.filter(
~Q(two_fa_type=None), ~Q(two_fa_type='')
).update(is_verified=True)