django-ninja-aio-crud 0.7.4__tar.gz → 0.7.6__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.6}/PKG-INFO +1 -1
- {django_ninja_aio_crud-0.7.4 → django_ninja_aio_crud-0.7.6}/ninja_aio/__init__.py +1 -1
- {django_ninja_aio_crud-0.7.4 → django_ninja_aio_crud-0.7.6}/ninja_aio/models.py +19 -8
- {django_ninja_aio_crud-0.7.4 → django_ninja_aio_crud-0.7.6}/LICENSE +0 -0
- {django_ninja_aio_crud-0.7.4 → django_ninja_aio_crud-0.7.6}/README.md +0 -0
- {django_ninja_aio_crud-0.7.4 → django_ninja_aio_crud-0.7.6}/ninja_aio/api.py +0 -0
- {django_ninja_aio_crud-0.7.4 → django_ninja_aio_crud-0.7.6}/ninja_aio/auth.py +0 -0
- {django_ninja_aio_crud-0.7.4 → django_ninja_aio_crud-0.7.6}/ninja_aio/exceptions.py +0 -0
- {django_ninja_aio_crud-0.7.4 → django_ninja_aio_crud-0.7.6}/ninja_aio/parsers.py +0 -0
- {django_ninja_aio_crud-0.7.4 → django_ninja_aio_crud-0.7.6}/ninja_aio/renders.py +0 -0
- {django_ninja_aio_crud-0.7.4 → django_ninja_aio_crud-0.7.6}/ninja_aio/schemas.py +0 -0
- {django_ninja_aio_crud-0.7.4 → django_ninja_aio_crud-0.7.6}/ninja_aio/types.py +0 -0
- {django_ninja_aio_crud-0.7.4 → django_ninja_aio_crud-0.7.6}/ninja_aio/views.py +0 -0
- {django_ninja_aio_crud-0.7.4 → django_ninja_aio_crud-0.7.6}/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:
|
|
@@ -169,7 +174,9 @@ class ModelUtil:
|
|
|
169
174
|
):
|
|
170
175
|
if obj_schema is None:
|
|
171
176
|
raise SerializeError({"obj_schema": "must be provided"}, 400)
|
|
172
|
-
return await self.parse_output_data(
|
|
177
|
+
return await self.parse_output_data(
|
|
178
|
+
request, await sync_to_async(obj_schema.from_orm)(obj)
|
|
179
|
+
)
|
|
173
180
|
|
|
174
181
|
async def update_s(
|
|
175
182
|
self, request: HttpRequest, data: Schema, pk: int | str, obj_schema: Schema
|
|
@@ -348,7 +355,10 @@ class ModelSerializer(models.Model, metaclass=ModelSerializerMeta):
|
|
|
348
355
|
@classmethod
|
|
349
356
|
def get_related_schema_data(cls):
|
|
350
357
|
fields = cls.get_fields("read")
|
|
351
|
-
custom_f = {
|
|
358
|
+
custom_f = {
|
|
359
|
+
name: (value, default)
|
|
360
|
+
for name, value, default in cls.get_custom_fields("read")
|
|
361
|
+
}
|
|
352
362
|
_related_fields = []
|
|
353
363
|
for f in fields + list(custom_f.keys()):
|
|
354
364
|
field_obj = getattr(cls, f)
|
|
@@ -367,8 +377,9 @@ class ModelSerializer(models.Model, metaclass=ModelSerializerMeta):
|
|
|
367
377
|
if not _related_fields:
|
|
368
378
|
return None, None
|
|
369
379
|
|
|
370
|
-
|
|
371
|
-
|
|
380
|
+
custom_related_fields = [
|
|
381
|
+
(f, *custom_f[f]) for f in _related_fields if f in custom_f
|
|
382
|
+
]
|
|
372
383
|
related_fields = [f for f in _related_fields if f not in custom_f]
|
|
373
384
|
return related_fields, custom_related_fields
|
|
374
385
|
|
|
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
|