django-ninja-aio-crud 0.7.4__tar.gz → 0.7.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-ninja-aio-crud
3
- Version: 0.7.4
3
+ Version: 0.7.5
4
4
  Summary: Django Ninja AIO CRUD - Rest Framework
5
5
  Author: Giuseppe Casillo
6
6
  Requires-Python: >=3.10
@@ -1,6 +1,6 @@
1
1
  """Django Ninja AIO CRUD - Rest Framework"""
2
2
 
3
- __version__ = "0.7.4"
3
+ __version__ = "0.7.5"
4
4
 
5
5
  from .api import NinjaAIO
6
6
 
@@ -7,6 +7,7 @@ from ninja.orm import create_schema
7
7
  from django.db import models
8
8
  from django.http import HttpRequest
9
9
  from django.core.exceptions import ObjectDoesNotExist
10
+ from asgiref.sync import sync_to_async
10
11
  from django.db.models.fields.related_descriptors import (
11
12
  ReverseManyToOneDescriptor,
12
13
  ReverseOneToOneDescriptor,
@@ -19,6 +20,10 @@ from .exceptions import SerializeError
19
20
  from .types import S_TYPES, F_TYPES, SCHEMA_TYPES, ModelSerializerMeta
20
21
 
21
22
 
23
+ async def agetattr(obj, name: str, default=None):
24
+ return await sync_to_async(getattr)(obj, name, default)
25
+
26
+
22
27
  class ModelUtil:
23
28
  def __init__(self, model: type["ModelSerializer"] | models.Model):
24
29
  self.model = model
@@ -103,7 +108,7 @@ class ModelUtil:
103
108
  continue
104
109
  if self.model.is_optional(k) and v is None:
105
110
  continue
106
- field_obj = getattr(self.model, k).field
111
+ field_obj = (await agetattr(self.model, k)).field
107
112
  if isinstance(field_obj, models.BinaryField):
108
113
  try:
109
114
  payload |= {k: base64.b64decode(v)}
@@ -125,10 +130,10 @@ class ModelUtil:
125
130
  payload = data.model_dump()
126
131
  for k, v in payload.items():
127
132
  try:
128
- field_obj = getattr(self.model, k).field
133
+ field_obj = (await agetattr(self.model, k)).field
129
134
  except AttributeError:
130
135
  try:
131
- field_obj = getattr(self.model, k).related
136
+ field_obj = (await agetattr(self.model, k)).related
132
137
  except AttributeError:
133
138
  pass
134
139
  if isinstance(v, dict) and (
@@ -141,7 +146,7 @@ class ModelUtil:
141
146
  )
142
147
  if isinstance(field_obj, models.ForeignKey):
143
148
  for rel_k, rel_v in v.items():
144
- field_rel_obj = getattr(rel, rel_k)
149
+ field_rel_obj = await agetattr(rel, rel_k)
145
150
  if isinstance(field_rel_obj, models.ForeignKey):
146
151
  olds_k.append({rel_k: rel_v})
147
152
  for obj in olds_k: