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.
- {django_ninja_aio_crud-0.7.4 → django_ninja_aio_crud-0.7.5}/PKG-INFO +1 -1
- {django_ninja_aio_crud-0.7.4 → django_ninja_aio_crud-0.7.5}/ninja_aio/__init__.py +1 -1
- {django_ninja_aio_crud-0.7.4 → django_ninja_aio_crud-0.7.5}/ninja_aio/models.py +9 -4
- {django_ninja_aio_crud-0.7.4 → django_ninja_aio_crud-0.7.5}/LICENSE +0 -0
- {django_ninja_aio_crud-0.7.4 → django_ninja_aio_crud-0.7.5}/README.md +0 -0
- {django_ninja_aio_crud-0.7.4 → django_ninja_aio_crud-0.7.5}/ninja_aio/api.py +0 -0
- {django_ninja_aio_crud-0.7.4 → django_ninja_aio_crud-0.7.5}/ninja_aio/auth.py +0 -0
- {django_ninja_aio_crud-0.7.4 → django_ninja_aio_crud-0.7.5}/ninja_aio/exceptions.py +0 -0
- {django_ninja_aio_crud-0.7.4 → django_ninja_aio_crud-0.7.5}/ninja_aio/parsers.py +0 -0
- {django_ninja_aio_crud-0.7.4 → django_ninja_aio_crud-0.7.5}/ninja_aio/renders.py +0 -0
- {django_ninja_aio_crud-0.7.4 → django_ninja_aio_crud-0.7.5}/ninja_aio/schemas.py +0 -0
- {django_ninja_aio_crud-0.7.4 → django_ninja_aio_crud-0.7.5}/ninja_aio/types.py +0 -0
- {django_ninja_aio_crud-0.7.4 → django_ninja_aio_crud-0.7.5}/ninja_aio/views.py +0 -0
- {django_ninja_aio_crud-0.7.4 → django_ninja_aio_crud-0.7.5}/pyproject.toml +0 -0
|
@@ -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 =
|
|
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 =
|
|
133
|
+
field_obj = (await agetattr(self.model, k)).field
|
|
129
134
|
except AttributeError:
|
|
130
135
|
try:
|
|
131
|
-
field_obj =
|
|
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 =
|
|
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:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|