feat: добавлена интеграция синхронизации с Recommerce
This commit is contained in:
@@ -26,12 +26,22 @@ class EncryptedCharField(models.CharField):
|
||||
description = "Encrypted CharField using Fernet"
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
# Сохраняем оригинальный max_length для deconstruct()
|
||||
self._original_max_length = kwargs.get('max_length')
|
||||
# Зашифрованные данные длиннее исходных, увеличиваем max_length
|
||||
if 'max_length' in kwargs:
|
||||
# Fernet добавляет ~100 байт overhead
|
||||
kwargs['max_length'] = max(kwargs['max_length'] * 2, 500)
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def deconstruct(self):
|
||||
"""Возвращаем оригинальные параметры для миграций"""
|
||||
name, path, args, kwargs = super().deconstruct()
|
||||
# Восстанавливаем оригинальный max_length
|
||||
if self._original_max_length is not None:
|
||||
kwargs['max_length'] = self._original_max_length
|
||||
return name, path, args, kwargs
|
||||
|
||||
def _get_fernet(self):
|
||||
"""Получить инстанс Fernet с ключом из settings"""
|
||||
key = getattr(settings, 'ENCRYPTION_KEY', None)
|
||||
|
||||
Reference in New Issue
Block a user