from typing import Any, Dict, List

from django.core.exceptions import FieldDoesNotExist
from django.db import models


def serialize_model(model: models.Model) -> Dict[str, Any]:
result = {
name: serialize_model(foreign_key)
for name, foreign_key in model.__dict__["_state"].__dict__.get("fields_cache", {}).items()
}
for name, value in model.__dict__.items():
try:
model._meta.get_field(name)
except FieldDoesNotExist:
continue
else:
result[name] = value
for name, queryset in model.__dict__.get("_prefetched_objects_cache", {}).items():
result[name] = serialize_queryset(queryset)
return result


def serialize_queryset(queryset: models.QuerySet) -> List[Dict[str, Any]]:
return [serialize_model(model) for model in queryset]



作者:前方、有光