django-admin-rest-api 1.2.0__tar.gz → 1.3.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.
Files changed (43) hide show
  1. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/PKG-INFO +1 -1
  2. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/api/views/detail.py +29 -0
  3. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/pyproject.toml +1 -1
  4. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/LICENSE +0 -0
  5. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/README.md +0 -0
  6. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/__init__.py +0 -0
  7. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/api/README.md +0 -0
  8. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/api/__init__.py +0 -0
  9. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/api/dates.py +0 -0
  10. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/api/filters.py +0 -0
  11. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/api/inlines.py +0 -0
  12. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/api/inlines_write.py +0 -0
  13. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/api/panels.py +0 -0
  14. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/api/permissions.py +0 -0
  15. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/api/registry.py +0 -0
  16. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/api/serializers.py +0 -0
  17. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/api/urls.py +0 -0
  18. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/api/views/README.md +0 -0
  19. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/api/views/__init__.py +0 -0
  20. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/api/views/actions.py +0 -0
  21. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/api/views/auth.py +0 -0
  22. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/api/views/autocomplete.py +0 -0
  23. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/api/views/bulk.py +0 -0
  24. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/api/views/create.py +0 -0
  25. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/api/views/create_form.py +0 -0
  26. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/api/views/delete_preview.py +0 -0
  27. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/api/views/destroy.py +0 -0
  28. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/api/views/history.py +0 -0
  29. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/api/views/list.py +0 -0
  30. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/api/views/password.py +0 -0
  31. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/api/views/recent_actions.py +0 -0
  32. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/api/views/registry.py +0 -0
  33. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/api/views/schema.py +0 -0
  34. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/api/views/update.py +0 -0
  35. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/api/writes.py +0 -0
  36. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/apps.py +0 -0
  37. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/audit.py +0 -0
  38. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/conf.py +0 -0
  39. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/management/__init__.py +0 -0
  40. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/management/commands/__init__.py +0 -0
  41. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/management/commands/admin_rest_api_check.py +0 -0
  42. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/system_checks.py +0 -0
  43. {django_admin_rest_api-1.2.0 → django_admin_rest_api-1.3.0}/django_admin_rest_api/urls.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-admin-rest-api
3
- Version: 1.2.0
3
+ Version: 1.3.0
4
4
  Summary: A JSON REST API for the Django admin — same permissions, same ModelAdmin, no new features. Powers django-admin-react and django-admin-mcp.
5
5
  License: MIT
6
6
  License-File: LICENSE
@@ -455,6 +455,35 @@ def _apply_widget_override(descriptor: dict[str, Any], form_field: Any) -> None:
455
455
  ):
456
456
  descriptor["type"] = "string"
457
457
 
458
+ # Custom widget detection (#625). If the bound form field's widget
459
+ # class lives OUTSIDE Django's own ``django.*`` widget tree, it
460
+ # came from the consumer's own code — via ``formfield_overrides``,
461
+ # ``formfield_for_dbfield``, a custom Form class, or a third-party
462
+ # widget library. Emit a ``widget: "custom"`` hint plus the
463
+ # widget's dotted Python path so SPA-side plugin registrations
464
+ # can dispatch on it. A subclass of a stock widget (e.g.
465
+ # ``MyAttrInput(TextInput)``) stays NOT marked custom — the
466
+ # default render path for the field's ``type`` still works for it
467
+ # since the attribute-level differences don't change the wire
468
+ # contract.
469
+ #
470
+ # The hint is only set when no earlier branch (``radio_fields`` /
471
+ # ``raw_id_fields`` / ``filter_horizontal`` / ``PasswordInput``)
472
+ # already claimed ``descriptor["widget"]`` — those wins are
473
+ # specific opt-ins that the operator chose explicitly and that the
474
+ # SPA already has dedicated renders for.
475
+ if "widget" not in descriptor:
476
+ widget_module = type(widget).__module__
477
+ if not widget_module.startswith("django."):
478
+ # Stock Django widgets we'd accidentally catch via
479
+ # subclassing chains (e.g. an admin widget subclassing a
480
+ # stock one but living in ``django.contrib.admin``) are
481
+ # excluded by the ``django.`` prefix above. Truly custom
482
+ # widget classes (from a consumer's app or a third-party
483
+ # package) flow through here.
484
+ descriptor["widget"] = "custom"
485
+ descriptor["widget_class"] = f"{widget_module}.{type(widget).__name__}"
486
+
458
487
 
459
488
  # Form-field-class → wire type. Mirrors `_TYPE_BY_INTERNAL` in
460
489
  # serializers.py but for Django's `forms.*` field classes (used by a
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "django-admin-rest-api"
3
- version = "1.2.0"
3
+ version = "1.3.0"
4
4
  description = "A JSON REST API for the Django admin — same permissions, same ModelAdmin, no new features. Powers django-admin-react and django-admin-mcp."
5
5
  authors = ["django-admin-rest-api contributors"]
6
6
  license = "MIT"