Добавлены тесты для Environment

This commit is contained in:
2026-07-23 16:49:31 +03:00
parent 7f25095014
commit abd999d245
8 changed files with 945 additions and 3 deletions

View File

@@ -20,7 +20,7 @@ class ModelUtils:
"""
@classmethod
def concat_data(cls, data: dict[str, Any] | Model, target: dict[str, Any], ) -> None:
def concat_data(cls, data: dict[str | int, Any] | Model, target: dict[str | int, Any], ) -> None:
"""
Объединяет данные
@@ -31,6 +31,8 @@ class ModelUtils:
# Получаем объект данных
if isinstance(data, Model):
source = model_to_dict(data)
if 'id' in source and source['id'] is None:
del source['id']
else:
source = data
@@ -48,6 +50,21 @@ class ModelUtils:
:param validated_data: Данные для обновления
"""
# Для модели и словаря набор полей строится по-разному
if isinstance(instance, Model):
is_model = True
fields = [field.name for field in instance._meta.get_fields()]
elif isinstance(instance, dict):
is_model = False
fields = instance.keys()
else:
raise TypeError('Instance must be a Model or dict')
# Назначаем только существующие поля
for attr, value in validated_data.items():
if hasattr(instance, attr):
setattr(instance, attr, value)
if attr in fields:
if is_model:
setattr(instance, attr, value)
else:
# noinspection unresolved-references
instance[attr] = value