fastadmin 0.3.5__tar.gz → 0.3.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.
- {fastadmin-0.3.5 → fastadmin-0.3.6}/PKG-INFO +1 -1
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/models/base.py +0 -4
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/models/orms/django.py +0 -10
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/models/orms/ponyorm.py +0 -10
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/models/orms/sqlalchemy.py +0 -30
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/models/orms/tortoise.py +0 -10
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/static/index.min.js +164 -164
- {fastadmin-0.3.5 → fastadmin-0.3.6}/pyproject.toml +1 -1
- {fastadmin-0.3.5 → fastadmin-0.3.6}/LICENSE +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/README.md +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/__init__.py +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/api/__init__.py +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/api/exceptions.py +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/api/frameworks/__init__.py +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/api/frameworks/django/__init__.py +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/api/frameworks/django/app/__init__.py +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/api/frameworks/django/app/api.py +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/api/frameworks/django/app/urls.py +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/api/frameworks/django/app/views.py +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/api/frameworks/fastapi/__init__.py +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/api/frameworks/fastapi/api.py +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/api/frameworks/fastapi/app.py +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/api/frameworks/fastapi/views.py +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/api/frameworks/flask/__init__.py +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/api/frameworks/flask/api.py +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/api/frameworks/flask/app.py +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/api/frameworks/flask/views.py +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/api/helpers.py +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/api/schemas.py +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/api/service.py +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/models/__init__.py +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/models/decorators.py +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/models/helpers.py +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/models/orms/__init__.py +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/models/schemas.py +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/settings.py +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/static/assets/worker-6Z7niv9l.js +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/static/assets/worker-C151k0-L.js +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/static/assets/worker-C9KPOOKD.js +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/static/assets/worker-D1fCgYB7.js +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/static/assets/worker-D3TWcJOI.js +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/static/assets/worker-DRNcaZ-V.js +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/static/assets/worker-MF2p-l5_.js +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/static/images/favicon.png +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/static/images/header-logo.svg +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/static/images/sign-in-logo.svg +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/static/index.html +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/static/index.min.css +0 -0
- {fastadmin-0.3.5 → fastadmin-0.3.6}/fastadmin/templates/index.html +0 -0
|
@@ -248,8 +248,6 @@ class BaseModelAdmin:
|
|
|
248
248
|
search: str | None = None,
|
|
249
249
|
sort_by: str | None = None,
|
|
250
250
|
filters: dict | None = None,
|
|
251
|
-
prefetch_related_fields: list[str] | None = None,
|
|
252
|
-
additional_search_fields: list[str] | None = None,
|
|
253
251
|
) -> tuple[list[Any], int]:
|
|
254
252
|
"""This method is used to get list of orm/db model objects.
|
|
255
253
|
|
|
@@ -258,8 +256,6 @@ class BaseModelAdmin:
|
|
|
258
256
|
:params search: a search query.
|
|
259
257
|
:params sort_by: a sort by field name.
|
|
260
258
|
:params filters: a dict of filters.
|
|
261
|
-
:params prefetch_related_fields: a list of related fields to prefetch.
|
|
262
|
-
:params additional_search_fields: a list of additional search fields.
|
|
263
259
|
:return: A tuple of list of objects and total count.
|
|
264
260
|
"""
|
|
265
261
|
raise NotImplementedError
|
|
@@ -244,8 +244,6 @@ class DjangoORMMixin:
|
|
|
244
244
|
search: str | None = None,
|
|
245
245
|
sort_by: str | None = None,
|
|
246
246
|
filters: dict | None = None,
|
|
247
|
-
prefetch_related_fields: list[str] | None = None,
|
|
248
|
-
additional_search_fields: list[str] | None = None,
|
|
249
247
|
) -> tuple[list[Any], int]:
|
|
250
248
|
"""This method is used to get list of orm/db model objects.
|
|
251
249
|
|
|
@@ -254,15 +252,10 @@ class DjangoORMMixin:
|
|
|
254
252
|
:params search: a search query.
|
|
255
253
|
:params sort_by: a sort by field name.
|
|
256
254
|
:params filters: a dict of filters.
|
|
257
|
-
:params prefetch_related_fields: a list of related fields to prefetch.
|
|
258
|
-
:params additional_search_fields: a list of additional search fields.
|
|
259
255
|
:return: A tuple of list of objects and total count.
|
|
260
256
|
"""
|
|
261
257
|
qs = self.model_cls.objects.all()
|
|
262
258
|
|
|
263
|
-
if prefetch_related_fields:
|
|
264
|
-
qs = qs.prefetch_related(*prefetch_related_fields)
|
|
265
|
-
|
|
266
259
|
if filters:
|
|
267
260
|
for field_with_condition, value in filters.items():
|
|
268
261
|
field = field_with_condition[0]
|
|
@@ -270,9 +263,6 @@ class DjangoORMMixin:
|
|
|
270
263
|
qs = qs.filter(**{f"{field}__{condition}" if condition != "exact" else field: value})
|
|
271
264
|
|
|
272
265
|
search_fields = list(self.search_fields)
|
|
273
|
-
if additional_search_fields:
|
|
274
|
-
search_fields.extend(additional_search_fields)
|
|
275
|
-
|
|
276
266
|
if search and search_fields:
|
|
277
267
|
search_conditions = [Q(**{f + "__icontains": search}) for f in search_fields]
|
|
278
268
|
search_q = search_conditions[0]
|
|
@@ -224,8 +224,6 @@ class PonyORMMixin:
|
|
|
224
224
|
search: str | None = None,
|
|
225
225
|
sort_by: str | None = None,
|
|
226
226
|
filters: dict | None = None,
|
|
227
|
-
prefetch_related_fields: list[str] | None = None,
|
|
228
|
-
additional_search_fields: list[str] | None = None,
|
|
229
227
|
) -> tuple[list[Any], int]:
|
|
230
228
|
"""This method is used to get list of orm/db model objects.
|
|
231
229
|
|
|
@@ -234,8 +232,6 @@ class PonyORMMixin:
|
|
|
234
232
|
:params search: a search query.
|
|
235
233
|
:params sort_by: a sort by field name.
|
|
236
234
|
:params filters: a dict of filters.
|
|
237
|
-
:params prefetch_related_fields: a list of related fields to prefetch.
|
|
238
|
-
:params additional_search_fields: a list of additional search fields.
|
|
239
235
|
:return: A tuple of list of objects and total count.
|
|
240
236
|
"""
|
|
241
237
|
|
|
@@ -276,9 +272,6 @@ class PonyORMMixin:
|
|
|
276
272
|
qs = qs.filter(filter_expr)
|
|
277
273
|
|
|
278
274
|
search_fields = list(self.search_fields)
|
|
279
|
-
if additional_search_fields:
|
|
280
|
-
search_fields.extend(additional_search_fields)
|
|
281
|
-
|
|
282
275
|
if search and search_fields:
|
|
283
276
|
ids = []
|
|
284
277
|
for search_field in search_fields:
|
|
@@ -304,9 +297,6 @@ class PonyORMMixin:
|
|
|
304
297
|
if self.list_select_related:
|
|
305
298
|
qs = qs.prefetch(*[getattr(self.model_cls, field) for field in self.list_select_related])
|
|
306
299
|
|
|
307
|
-
if prefetch_related_fields:
|
|
308
|
-
qs = qs.prefetch(*[getattr(self.model_cls, field) for field in prefetch_related_fields])
|
|
309
|
-
|
|
310
300
|
if offset is not None and limit is not None:
|
|
311
301
|
qs = qs.limit(limit, offset=offset)
|
|
312
302
|
|
|
@@ -300,8 +300,6 @@ class SqlAlchemyMixin:
|
|
|
300
300
|
search: str | None = None,
|
|
301
301
|
sort_by: str | None = None,
|
|
302
302
|
filters: dict | None = None,
|
|
303
|
-
prefetch_related_fields: list[str] | None = None,
|
|
304
|
-
additional_search_fields: list[str] | None = None,
|
|
305
303
|
) -> tuple[list[Any], int]:
|
|
306
304
|
"""This method is used to get list of orm/db model objects.
|
|
307
305
|
|
|
@@ -310,8 +308,6 @@ class SqlAlchemyMixin:
|
|
|
310
308
|
:params search: a search query.
|
|
311
309
|
:params sort_by: a sort by field name.
|
|
312
310
|
:params filters: a dict of filters.
|
|
313
|
-
:params prefetch_related_fields: a list of related fields to prefetch.
|
|
314
|
-
:params additional_search_fields: a list of additional search fields.
|
|
315
311
|
:return: A tuple of list of objects and total count.
|
|
316
312
|
"""
|
|
317
313
|
|
|
@@ -324,7 +320,6 @@ class SqlAlchemyMixin:
|
|
|
324
320
|
sessionmaker = self.get_sessionmaker()
|
|
325
321
|
async with sessionmaker() as session:
|
|
326
322
|
qs = select(self.model_cls)
|
|
327
|
-
|
|
328
323
|
if filters:
|
|
329
324
|
q = []
|
|
330
325
|
for field_with_condition, value in filters.items():
|
|
@@ -359,9 +354,6 @@ class SqlAlchemyMixin:
|
|
|
359
354
|
qs = qs.where(and_(*q))
|
|
360
355
|
|
|
361
356
|
search_fields = list(self.search_fields)
|
|
362
|
-
if additional_search_fields:
|
|
363
|
-
search_fields.extend(additional_search_fields)
|
|
364
|
-
|
|
365
357
|
if search and search_fields:
|
|
366
358
|
q = []
|
|
367
359
|
for field in search_fields:
|
|
@@ -385,28 +377,6 @@ class SqlAlchemyMixin:
|
|
|
385
377
|
for field in self.list_select_related:
|
|
386
378
|
qs = qs.options(selectinload(getattr(self.model_cls, field)))
|
|
387
379
|
|
|
388
|
-
if prefetch_related_fields:
|
|
389
|
-
for field_path in prefetch_related_fields:
|
|
390
|
-
parts = field_path.split("__")
|
|
391
|
-
current_model = self.model_cls
|
|
392
|
-
attr = getattr(current_model, parts[0], None)
|
|
393
|
-
if attr is None:
|
|
394
|
-
continue
|
|
395
|
-
option = selectinload(attr)
|
|
396
|
-
current_model = getattrs(attr, "property.mapper.class_")
|
|
397
|
-
for part in parts[1:]:
|
|
398
|
-
if current_model is None:
|
|
399
|
-
break
|
|
400
|
-
nested_attr = getattr(current_model, part, None)
|
|
401
|
-
if nested_attr is None:
|
|
402
|
-
break
|
|
403
|
-
next_model = getattrs(nested_attr, "property.mapper.class_")
|
|
404
|
-
if next_model is None:
|
|
405
|
-
break
|
|
406
|
-
option = option.selectinload(nested_attr)
|
|
407
|
-
current_model = next_model
|
|
408
|
-
qs = qs.options(option)
|
|
409
|
-
|
|
410
380
|
if offset is not None and limit is not None:
|
|
411
381
|
qs = qs.offset(offset)
|
|
412
382
|
qs = qs.limit(limit)
|
|
@@ -254,8 +254,6 @@ class TortoiseMixin:
|
|
|
254
254
|
search: str | None = None,
|
|
255
255
|
sort_by: str | None = None,
|
|
256
256
|
filters: dict | None = None,
|
|
257
|
-
prefetch_related_fields: list[str] | None = None,
|
|
258
|
-
additional_search_fields: list[str] | None = None,
|
|
259
257
|
) -> tuple[list[Any], int]:
|
|
260
258
|
"""This method is used to get list of orm/db model objects.
|
|
261
259
|
|
|
@@ -264,15 +262,10 @@ class TortoiseMixin:
|
|
|
264
262
|
:params search: a search query.
|
|
265
263
|
:params sort_by: a sort by field name.
|
|
266
264
|
:params filters: a dict of filters.
|
|
267
|
-
:params prefetch_related_fields: a list of related fields to prefetch.
|
|
268
|
-
:params additional_search_fields: a list of additional search fields.
|
|
269
265
|
:return: A tuple of list of objects and total count.
|
|
270
266
|
"""
|
|
271
267
|
qs = self.model_cls.all()
|
|
272
268
|
|
|
273
|
-
if prefetch_related_fields:
|
|
274
|
-
qs = qs.prefetch_related(*prefetch_related_fields).distinct()
|
|
275
|
-
|
|
276
269
|
if filters:
|
|
277
270
|
for field_with_condition, value in filters.items():
|
|
278
271
|
field = field_with_condition[0]
|
|
@@ -280,9 +273,6 @@ class TortoiseMixin:
|
|
|
280
273
|
qs = qs.filter(**{f"{field}__{condition}" if condition != "exact" else field: value})
|
|
281
274
|
|
|
282
275
|
search_fields = list(self.search_fields)
|
|
283
|
-
if additional_search_fields:
|
|
284
|
-
search_fields.extend(additional_search_fields)
|
|
285
|
-
|
|
286
276
|
if search and search_fields:
|
|
287
277
|
qs = qs.filter(
|
|
288
278
|
functools.reduce(
|