Добавлен класс CoreViewSet и тесты к нему
This commit is contained in:
@@ -9,3 +9,4 @@
|
||||
"""
|
||||
|
||||
from .date_utils import DateUtils
|
||||
from .model_utils import ModelUtils
|
||||
|
||||
53
net/xeaf/rack/utils/model_utils.py
Normal file
53
net/xeaf/rack/utils/model_utils.py
Normal file
@@ -0,0 +1,53 @@
|
||||
# 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)
|
||||
Reference in New Issue
Block a user