Files
drf-rack/net/xeaf/rack/utils/model_utils.py

54 lines
1.5 KiB
Python

# DRF Rack
# Библиотека классов расширений для Django REST Framework
#
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
# Все права защищены. Лицензия: MIT
"""
Описание класса ModelUtils
"""
from typing import Any
from django.db.models import Model
from django.forms import model_to_dict
class ModelUtils:
"""
Реализует служебные функции работы с моделями данных
"""
@classmethod
def concat_data(cls, data: dict[str, Any] | Model, target: dict[str, Any], ) -> None:
"""
Объединяет данные
:param data: Источник данных
:param target: Приемник
"""
# Получаем объект данных
if isinstance(data, Model):
source = model_to_dict(data)
else:
source = data
# noinspection PyUnresolvedReferences
for key, value in source.items():
if key not in target:
target[key] = value
@classmethod
def update_data(cls, instance: dict[str, Any] | Model, validated_data: dict[str, Any]) -> None:
"""
Обновляет данные объекта
:param instance: Объект
:param validated_data: Данные для обновления
"""
for attr, value in validated_data.items():
if hasattr(instance, attr):
setattr(instance, attr, value)