django-ninja-aio-crud 0.6.4__tar.gz → 0.7.0__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.6.4 → django_ninja_aio_crud-0.7.0}/PKG-INFO +1 -1
- {django_ninja_aio_crud-0.6.4 → django_ninja_aio_crud-0.7.0}/ninja_aio/__init__.py +1 -1
- {django_ninja_aio_crud-0.6.4 → django_ninja_aio_crud-0.7.0}/ninja_aio/models.py +51 -2
- {django_ninja_aio_crud-0.6.4 → django_ninja_aio_crud-0.7.0}/README.md +0 -0
- {django_ninja_aio_crud-0.6.4 → django_ninja_aio_crud-0.7.0}/ninja_aio/api.py +0 -0
- {django_ninja_aio_crud-0.6.4 → django_ninja_aio_crud-0.7.0}/ninja_aio/auth.py +0 -0
- {django_ninja_aio_crud-0.6.4 → django_ninja_aio_crud-0.7.0}/ninja_aio/exceptions.py +0 -0
- {django_ninja_aio_crud-0.6.4 → django_ninja_aio_crud-0.7.0}/ninja_aio/parsers.py +0 -0
- {django_ninja_aio_crud-0.6.4 → django_ninja_aio_crud-0.7.0}/ninja_aio/renders.py +0 -0
- {django_ninja_aio_crud-0.6.4 → django_ninja_aio_crud-0.7.0}/ninja_aio/schemas.py +0 -0
- {django_ninja_aio_crud-0.6.4 → django_ninja_aio_crud-0.7.0}/ninja_aio/types.py +0 -0
- {django_ninja_aio_crud-0.6.4 → django_ninja_aio_crud-0.7.0}/ninja_aio/views.py +0 -0
- {django_ninja_aio_crud-0.6.4 → django_ninja_aio_crud-0.7.0}/pyproject.toml +0 -0
|
@@ -11,6 +11,8 @@ from django.db.models.fields.related_descriptors import (
|
|
|
11
11
|
ReverseManyToOneDescriptor,
|
|
12
12
|
ReverseOneToOneDescriptor,
|
|
13
13
|
ManyToManyDescriptor,
|
|
14
|
+
ForwardManyToOneDescriptor,
|
|
15
|
+
ForwardOneToOneDescriptor,
|
|
14
16
|
)
|
|
15
17
|
|
|
16
18
|
from .exceptions import SerializeError
|
|
@@ -99,7 +101,7 @@ class ModelUtil:
|
|
|
99
101
|
if isinstance(self.model, ModelSerializerMeta):
|
|
100
102
|
if self.model.is_custom(k):
|
|
101
103
|
continue
|
|
102
|
-
if self.model.is_optional(k) and
|
|
104
|
+
if self.model.is_optional(k) and v is None:
|
|
103
105
|
continue
|
|
104
106
|
field_obj = getattr(self.model, k).field
|
|
105
107
|
if isinstance(field_obj, models.BinaryField):
|
|
@@ -332,6 +334,41 @@ class ModelSerializer(models.Model, metaclass=ModelSerializerMeta):
|
|
|
332
334
|
"""
|
|
333
335
|
pass
|
|
334
336
|
|
|
337
|
+
@classmethod
|
|
338
|
+
def get_forward_relation_schema(cls, obj: type["ModelSerializer"], field: str):
|
|
339
|
+
cls_f = []
|
|
340
|
+
for rel_f in obj.ReadSerializer.fields:
|
|
341
|
+
rel_f_obj = getattr(obj, rel_f)
|
|
342
|
+
if isinstance(
|
|
343
|
+
rel_f_obj,
|
|
344
|
+
(
|
|
345
|
+
ManyToManyDescriptor,
|
|
346
|
+
ReverseManyToOneDescriptor,
|
|
347
|
+
ReverseOneToOneDescriptor,
|
|
348
|
+
),
|
|
349
|
+
):
|
|
350
|
+
if isinstance(rel_f_obj, ManyToManyDescriptor):
|
|
351
|
+
rel_obj: ModelSerializer = rel_f_obj.field.related_model
|
|
352
|
+
if rel_f_obj.reverse:
|
|
353
|
+
rel_obj = rel_f_obj.field.model
|
|
354
|
+
elif isinstance(rel_f_obj, ReverseManyToOneDescriptor):
|
|
355
|
+
rel_obj = rel_f_obj.field.model
|
|
356
|
+
else: # ReverseOneToOneDescriptor
|
|
357
|
+
rel_obj = rel_f_obj.related.related_model
|
|
358
|
+
if not rel_obj == cls:
|
|
359
|
+
continue
|
|
360
|
+
cls_f.append(rel_f)
|
|
361
|
+
obj.ReadSerializer.fields.remove(rel_f)
|
|
362
|
+
rel_schema = obj.generate_read_s(depth=0)
|
|
363
|
+
rel_data = (
|
|
364
|
+
field,
|
|
365
|
+
rel_schema | None,
|
|
366
|
+
None,
|
|
367
|
+
)
|
|
368
|
+
if len(cls_f) > 0:
|
|
369
|
+
obj.ReadSerializer.fields.append(*cls_f)
|
|
370
|
+
return rel_data
|
|
371
|
+
|
|
335
372
|
@classmethod
|
|
336
373
|
def get_reverse_relation_schema(
|
|
337
374
|
cls, obj: type["ModelSerializer"], rel_type: type[REL_TYPES], field: str
|
|
@@ -372,6 +409,7 @@ class ModelSerializer(models.Model, metaclass=ModelSerializerMeta):
|
|
|
372
409
|
def get_schema_out_data(cls):
|
|
373
410
|
fields = []
|
|
374
411
|
reverse_rels = []
|
|
412
|
+
rels = []
|
|
375
413
|
for f in cls.get_fields("read"):
|
|
376
414
|
field_obj = getattr(cls, f)
|
|
377
415
|
if isinstance(
|
|
@@ -394,15 +432,26 @@ class ModelSerializer(models.Model, metaclass=ModelSerializerMeta):
|
|
|
394
432
|
rel_obj = field_obj.related.related_model
|
|
395
433
|
rel_type = "one"
|
|
396
434
|
|
|
435
|
+
if not rel_obj.get_fields("read") or not rel_obj.get_custom_fields("read"):
|
|
436
|
+
continue
|
|
397
437
|
rel_data = cls.get_reverse_relation_schema(rel_obj, rel_type, f)
|
|
398
438
|
reverse_rels.append(rel_data)
|
|
399
439
|
continue
|
|
440
|
+
if isinstance(
|
|
441
|
+
field_obj, (ForwardOneToOneDescriptor, ForwardManyToOneDescriptor)
|
|
442
|
+
):
|
|
443
|
+
rel_obj = field_obj.field.related_model
|
|
444
|
+
if not rel_obj.get_fields("read") or not rel_obj.get_custom_fields("read"):
|
|
445
|
+
continue
|
|
446
|
+
rel_data = cls.get_forward_relation_schema(rel_obj, f)
|
|
447
|
+
rels.append(rel_data)
|
|
448
|
+
continue
|
|
400
449
|
fields.append(f)
|
|
401
450
|
return (
|
|
402
451
|
fields,
|
|
403
452
|
reverse_rels,
|
|
404
453
|
cls.get_excluded_fields("read"),
|
|
405
|
-
cls.get_custom_fields("read"),
|
|
454
|
+
cls.get_custom_fields("read") + rels,
|
|
406
455
|
)
|
|
407
456
|
|
|
408
457
|
@classmethod
|
|
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
|