[BUG] Ninja 路由中忽略了 transaction.non_atomic_requests

作者: OscarVanL创建于 2026年8月28日更新于 2026年8月28日

Control: Django's decorator disables ATOMIC_REQUESTS on a regular view

@transaction.non_atomic_requests def django_view(request): return JsonResponse({"in_atomic_block": connection.in_atomic_block})

api = NinjaAPI()

Ninja: the same decorator has no effect on a ninja view

@api.get("/ninja-direct") @transaction.non_atomic_requests def direct_ninja_view(request): return {"in_atomic_block": connection.in_atomic_block}

decorated_api = NinjaAPI(urls_namespace="decorated-api")

Test the suggested workaround (not working)

try: @decorated_api.get("/ninja-decorate-view") @decorate_view(transaction.non_atomic_requests) def decorated_ninja_view(request): return {"in_atomic_block": connection.in_atomic_block} except AttributeError as exc: decorate_view_error = exc else: decorate_view_error = None

urlpatterns = [ path("django", django_view), path("", api.urls), ]

if name == "main": client = Client() django_result = client.get("/django").json() direct_ninja_result = client.get("/ninja-direct").json() direct_ninja_callback = resolve("/ninja-direct").func

内容来源: vitalik/django-ninja