fastadmin 0.2.10__py3-none-any.whl → 0.2.11__py3-none-any.whl

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.
@@ -24,7 +24,8 @@ def action(function=None, *, description: str | None = None):
24
24
  return decorator(function)
25
25
 
26
26
 
27
- def display(function=None):
27
+ # TODO: make the sorter parameter a string to specify how to sort the data
28
+ def display(function=None, *, sorter: bool = False):
28
29
  """Conveniently add attributes to a display function:
29
30
 
30
31
  Example of usage:
@@ -33,10 +34,13 @@ def display(function=None):
33
34
  return obj.publish_date is not None
34
35
 
35
36
  :param function: A function to decorate.
37
+ :param sorter: Enable sorting or not. **WARNING**: supported only for Django and Tortoise.
38
+ Function name should be like an ORM ordering param, e.g. `def user__username(self, obj)`.
36
39
  """
37
40
 
38
41
  def decorator(func):
39
42
  func.is_display = True
43
+ func.sorter = sorter
40
44
  return func
41
45
 
42
46
  if function is None:
@@ -15,6 +15,21 @@ from fastadmin.models.schemas import (
15
15
  ModelSchema,
16
16
  )
17
17
 
18
+ try:
19
+ from tortoise.models import Model as TortoiseModel
20
+ except ImportError:
21
+
22
+ class TortoiseModel: # type: ignore [no-redef]
23
+ pass
24
+
25
+
26
+ try:
27
+ from django.db.models import Model as DjangoModel
28
+ except ImportError:
29
+
30
+ class DjangoModel: # type: ignore [no-redef]
31
+ pass
32
+
18
33
 
19
34
  def register_admin_model_class(admin_model_class: type[ModelAdmin], orm_model_classes: list[Any], **kwargs) -> None:
20
35
  """This method is used to register an admin model.
@@ -162,17 +177,24 @@ def generate_models_schema(
162
177
  ),
163
178
  )
164
179
 
165
- for column_index, field_name in enumerate(orm_model_fields_for_serialize):
180
+ for field_name in orm_model_fields_for_serialize:
166
181
  display_field_function = getattr(admin_model_obj, field_name, None)
167
182
  if not display_field_function or not hasattr(display_field_function, "is_display"):
168
183
  continue
184
+ if field_name not in column_fields:
185
+ continue
186
+ column_index = column_fields.index(field_name)
187
+
188
+ sorter = getattr(display_field_function, "sorter", False)
189
+ if sorter and not issubclass(orm_model_cls, TortoiseModel | DjangoModel):
190
+ raise NotImplementedError("Sorter of custom columns is supported only for Tortoise or Django")
169
191
 
170
192
  fields_schema.append(
171
193
  ModelFieldSchema(
172
194
  name=field_name,
173
195
  list_configuration=ListConfigurationFieldSchema(
174
196
  index=column_index,
175
- sorter=False,
197
+ sorter=sorter,
176
198
  is_link=field_name in getattr(admin_model_obj, "list_display_links", ()),
177
199
  empty_value_display=admin_model_obj.empty_value_display,
178
200
  filter_widget_type=None,
@@ -328,9 +328,12 @@ class PonyORMMixin:
328
328
  :params id: an id of object.
329
329
  :return: None.
330
330
  """
331
- # delete(o for o in self.model_cls if getattr(o, self.get_model_pk_name(self.model_cls)) == id)
332
- # flush()
333
- # commit()
331
+ obj = next((i for i in self.model_cls.select(**{self.get_model_pk_name(self.model_cls): id})), None)
332
+ if not obj:
333
+ return
334
+ obj.delete()
335
+ flush()
336
+ commit()
334
337
 
335
338
  @sync_to_async
336
339
  @db_session
@@ -365,12 +368,12 @@ class PonyORMMixin:
365
368
  obj = next((i for i in self.model_cls.select(**{key_id: getattr(obj, key_id)})), None)
366
369
  if not obj:
367
370
  return
368
- obj.participants.clear()
371
+ getattr(obj, field).clear()
369
372
  if ids:
370
373
  rel_model_cls = getattr(self.model_cls, field).py_type
371
374
  rel_key_id = self.get_model_pk_name(rel_model_cls)
372
375
  rel_objs = list(rel_model_cls.select(lambda o: getattr(o, rel_key_id) in ids))
373
- obj.participants.add(rel_objs)
376
+ getattr(obj, field).add(rel_objs)
374
377
  flush()
375
378
  commit()
376
379
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fastadmin
3
- Version: 0.2.10
3
+ Version: 0.2.11
4
4
  Summary: FastAdmin is an easy-to-use Admin Dashboard App for FastAPI/Flask/Django inspired by Django Admin.
5
5
  Home-page: https://github.com/vsdudakov/fastadmin
6
6
  License: MIT
@@ -21,11 +21,11 @@ fastadmin/api/schemas.py,sha256=5eYJDGrSrvy0YdB8vak0zPv-a51a36CYJ_RVA2vgTKU,1348
21
21
  fastadmin/api/service.py,sha256=RfDOFYknkwmaIhya_y_Zlv8MjWBwZqPMCTw7tZCoP8k,18032
22
22
  fastadmin/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
23
  fastadmin/models/base.py,sha256=1KN0Wir7Bc-DtdpualxYnMzQq2JSBBrvpw2E22sBWfU,26728
24
- fastadmin/models/decorators.py,sha256=T1Dn1NTUEaFvsuV9EAEdBXODwVEFaQBSxdyicMvgwrU,2555
25
- fastadmin/models/helpers.py,sha256=gPgvjrR3wZaRC1gIc05Ah9tkgaxisgXjuLGvYXl4tY8,14117
24
+ fastadmin/models/decorators.py,sha256=KtfUBoiDJGbUGVgw4LZS7YdgqlEzHvA1mhXynnJ3-jg,2877
25
+ fastadmin/models/helpers.py,sha256=XngMU4kQex1r7k4qSIUdjaYiz-RPhE3HVDCegf5O7Io,14785
26
26
  fastadmin/models/orms/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
27
  fastadmin/models/orms/django.py,sha256=4SjnTptdLV1Yt013jsIZ4BQzmIRmJQEawaG-eY66n8Q,16185
28
- fastadmin/models/orms/ponyorm.py,sha256=v7JA8g5tGXb7uF2Q_kv5dk7gH2eVvvz7ngf7JCmN8hY,17836
28
+ fastadmin/models/orms/ponyorm.py,sha256=ntYii23PTbYJjR0qQH9ZguFcBKHnG9Yx50-hSfUNEk8,17903
29
29
  fastadmin/models/orms/sqlalchemy.py,sha256=GpDnmM2g358sz1Pde1DZSFMLLSxUoZ4eHwJcwFjGEdc,18742
30
30
  fastadmin/models/orms/tortoise.py,sha256=q1vLLm3uQ677Xe4gIb3VaIMbm5USdEHLWF22TZaj914,15949
31
31
  fastadmin/models/schemas.py,sha256=KxPlsoLfbrHuSz2F5h_UV18hKjgbeDioxWMcitbIJhk,4306
@@ -37,7 +37,7 @@ fastadmin/static/index.html,sha256=J6YYi1W7Y-YHlAfdTjy4KOd_yMZy-UWMJZAFDe78eAI,6
37
37
  fastadmin/static/index.min.css,sha256=219cuKBCK38b4RsJ-jBdTzdJ7OmSBqMmZGfpYfCb9b0,69757
38
38
  fastadmin/static/index.min.js,sha256=_u-R1Gjy5-cbFgwyHu0CyeaMV5LK4I5iRJtWR0hdzdo,2976527
39
39
  fastadmin/templates/index.html,sha256=WHIAqNmtJ_fHMgYrMHkUwsYxt4Xo6yMrieDODKDCN9Q,719
40
- fastadmin-0.2.10.dist-info/LICENSE,sha256=-5Cmq6xd5DlFq8rhBcqGMi8Mlh_h-YVjKOYjnYk5dyM,1063
41
- fastadmin-0.2.10.dist-info/METADATA,sha256=Tkmybp3jZcstGZfhCmLYiffibD8oPJKvDlZ_nSqnzOg,11743
42
- fastadmin-0.2.10.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
43
- fastadmin-0.2.10.dist-info/RECORD,,
40
+ fastadmin-0.2.11.dist-info/LICENSE,sha256=-5Cmq6xd5DlFq8rhBcqGMi8Mlh_h-YVjKOYjnYk5dyM,1063
41
+ fastadmin-0.2.11.dist-info/METADATA,sha256=-juFKRB-zCVRe2qn4SSw6QqXoBe5OVCJ-xk6s0kuy_4,11743
42
+ fastadmin-0.2.11.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
43
+ fastadmin-0.2.11.dist-info/RECORD,,