django-ninja-aio-crud 0.1.4__tar.gz → 0.2.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.1.4 → django_ninja_aio_crud-0.2.0}/PKG-INFO +1 -1
- {django_ninja_aio_crud-0.1.4 → django_ninja_aio_crud-0.2.0}/ninja_aio/__init__.py +1 -1
- {django_ninja_aio_crud-0.1.4 → django_ninja_aio_crud-0.2.0}/ninja_aio/models.py +36 -11
- {django_ninja_aio_crud-0.1.4 → django_ninja_aio_crud-0.2.0}/ninja_aio/views.py +1 -1
- {django_ninja_aio_crud-0.1.4 → django_ninja_aio_crud-0.2.0}/README.md +0 -0
- {django_ninja_aio_crud-0.1.4 → django_ninja_aio_crud-0.2.0}/ninja_aio/auth.py +0 -0
- {django_ninja_aio_crud-0.1.4 → django_ninja_aio_crud-0.2.0}/ninja_aio/exceptions.py +0 -0
- {django_ninja_aio_crud-0.1.4 → django_ninja_aio_crud-0.2.0}/ninja_aio/parsers.py +0 -0
- {django_ninja_aio_crud-0.1.4 → django_ninja_aio_crud-0.2.0}/ninja_aio/renders.py +0 -0
- {django_ninja_aio_crud-0.1.4 → django_ninja_aio_crud-0.2.0}/ninja_aio/schemas.py +0 -0
- {django_ninja_aio_crud-0.1.4 → django_ninja_aio_crud-0.2.0}/pyproject.toml +0 -0
|
@@ -7,10 +7,10 @@ from ninja.orm import create_schema
|
|
|
7
7
|
from django.db import models
|
|
8
8
|
from django.http import HttpResponse, HttpRequest
|
|
9
9
|
from django.core.exceptions import ObjectDoesNotExist
|
|
10
|
-
from django.db.models.fields.related import OneToOneRel
|
|
11
10
|
from django.db.models.fields.related_descriptors import (
|
|
12
11
|
ReverseManyToOneDescriptor,
|
|
13
12
|
ReverseOneToOneDescriptor,
|
|
13
|
+
ManyToManyDescriptor,
|
|
14
14
|
)
|
|
15
15
|
|
|
16
16
|
from .exceptions import SerializeError
|
|
@@ -46,6 +46,10 @@ class ModelSerializer(models.Model):
|
|
|
46
46
|
def has_custom_fields(self):
|
|
47
47
|
return self.has_custom_fields_create or self.has_custom_fields_update
|
|
48
48
|
|
|
49
|
+
@classmethod
|
|
50
|
+
def verbose_name_path_resolver(cls) -> str:
|
|
51
|
+
return "-".join(cls._meta.verbose_name_plural.split(" "))
|
|
52
|
+
|
|
49
53
|
def has_changed(self, field: str) -> bool:
|
|
50
54
|
"""
|
|
51
55
|
Check if a model field has changed
|
|
@@ -86,10 +90,14 @@ class ModelSerializer(models.Model):
|
|
|
86
90
|
reverse_rels = []
|
|
87
91
|
for f in cls.ReadSerializer.fields:
|
|
88
92
|
field_obj = getattr(cls, f)
|
|
93
|
+
if isinstance(field_obj, ManyToManyDescriptor):
|
|
94
|
+
reverse_rels.append(f)
|
|
95
|
+
continue
|
|
89
96
|
if isinstance(field_obj, ReverseManyToOneDescriptor):
|
|
90
97
|
reverse_rels.append(field_obj.field._related_name)
|
|
98
|
+
continue
|
|
91
99
|
if isinstance(field_obj, ReverseOneToOneDescriptor):
|
|
92
|
-
reverse_rels.append(
|
|
100
|
+
reverse_rels.append(field_obj.related.name)
|
|
93
101
|
return reverse_rels
|
|
94
102
|
|
|
95
103
|
@classmethod
|
|
@@ -98,14 +106,24 @@ class ModelSerializer(models.Model):
|
|
|
98
106
|
):
|
|
99
107
|
cls_f = []
|
|
100
108
|
for rel_f in obj.ReadSerializer.fields:
|
|
101
|
-
rel_f_obj = getattr(obj, rel_f)
|
|
109
|
+
rel_f_obj = getattr(obj, rel_f)
|
|
102
110
|
if (
|
|
103
|
-
isinstance(
|
|
104
|
-
|
|
111
|
+
isinstance(
|
|
112
|
+
rel_f_obj.field,
|
|
113
|
+
(
|
|
114
|
+
models.ForeignKey,
|
|
115
|
+
models.OneToOneField,
|
|
116
|
+
),
|
|
117
|
+
)
|
|
118
|
+
and rel_f_obj.field.related_model == cls
|
|
105
119
|
):
|
|
106
120
|
cls_f.append(rel_f)
|
|
107
121
|
obj.ReadSerializer.fields.remove(rel_f)
|
|
108
|
-
|
|
122
|
+
continue
|
|
123
|
+
if isinstance(rel_f_obj.field, models.ManyToManyField):
|
|
124
|
+
cls_f.append(rel_f)
|
|
125
|
+
obj.ReadSerializer.fields.remove(rel_f)
|
|
126
|
+
|
|
109
127
|
rel_schema = obj.generate_read_s(depth=0)
|
|
110
128
|
if rel_type == "many":
|
|
111
129
|
rel_schema = list[rel_schema]
|
|
@@ -124,13 +142,20 @@ class ModelSerializer(models.Model):
|
|
|
124
142
|
reverse_rels = []
|
|
125
143
|
for f in cls.ReadSerializer.fields:
|
|
126
144
|
field_obj = getattr(cls, f)
|
|
145
|
+
if isinstance(field_obj, ManyToManyDescriptor):
|
|
146
|
+
rel_obj: ModelSerializer = field_obj.field.related_model
|
|
147
|
+
if field_obj.reverse:
|
|
148
|
+
rel_obj: ModelSerializer = field_obj.field.model
|
|
149
|
+
rel_data = cls.get_reverse_relation_schema(rel_obj, "many", f)
|
|
150
|
+
reverse_rels.append(rel_data)
|
|
151
|
+
continue
|
|
127
152
|
if isinstance(field_obj, ReverseManyToOneDescriptor):
|
|
128
153
|
rel_obj: ModelSerializer = field_obj.field.model
|
|
129
154
|
rel_data = cls.get_reverse_relation_schema(rel_obj, "many", f)
|
|
130
155
|
reverse_rels.append(rel_data)
|
|
131
156
|
continue
|
|
132
157
|
if isinstance(field_obj, ReverseOneToOneDescriptor):
|
|
133
|
-
rel_obj: ModelSerializer =
|
|
158
|
+
rel_obj: ModelSerializer = field_obj.related.related_model
|
|
134
159
|
rel_data = cls.get_reverse_relation_schema(rel_obj, "one", f)
|
|
135
160
|
reverse_rels.append(rel_data)
|
|
136
161
|
continue
|
|
@@ -178,7 +203,7 @@ class ModelSerializer(models.Model):
|
|
|
178
203
|
field_obj = getattr(cls, k).related
|
|
179
204
|
if isinstance(v, dict) and (
|
|
180
205
|
isinstance(field_obj, models.ForeignKey)
|
|
181
|
-
or isinstance(field_obj,
|
|
206
|
+
or isinstance(field_obj, models.OneToOneField)
|
|
182
207
|
):
|
|
183
208
|
rel: ModelSerializer = await field_obj.related_model.get_object(
|
|
184
209
|
request, list(v.values())[0]
|
|
@@ -280,10 +305,10 @@ class ModelSerializer(models.Model):
|
|
|
280
305
|
for k, v in payload.items():
|
|
281
306
|
if v is not None:
|
|
282
307
|
setattr(obj, k, v)
|
|
283
|
-
|
|
284
|
-
await obj.custom_actions(payload)
|
|
308
|
+
await obj.custom_actions(customs)
|
|
285
309
|
await obj.asave()
|
|
286
|
-
|
|
310
|
+
updated_object = await cls.get_object(request, pk)
|
|
311
|
+
return await cls.read_s(request, updated_object)
|
|
287
312
|
|
|
288
313
|
@classmethod
|
|
289
314
|
async def delete_s(cls, request: HttpRequest, pk: int | str):
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|