"Объект не имеет атрибута" при выполнении 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)
Вернуться на верх