makeplane/plane · error · APIException

Please check the view

Error message

Please check the view

What it means

Same blanket-catch pattern as the api/ base view, in apps/api/plane/app/views/base.py. get_queryset wraps self.model.objects.all() in try/except; any exception is logged (or just printed when DEBUG) and re-raised as a generic APIException -> HTTP 400 'Please check the view'. In DEBUG=False the real traceback is not even printed — only 'Server Error'.

Source

Thrown at apps/api/plane/app/views/base.py:68

    permission_classes = [IsAuthenticated]

    filter_backends = (DjangoFilterBackend, SearchFilter)

    authentication_classes = [BaseSessionAuthentication]

    filterset_fields = []

    search_fields = []

    use_read_replica = False

    def get_queryset(self):
        try:
            return self.model.objects.all()
        except Exception as e:
            log_exception(e)
            raise APIException("Please check the view", status.HTTP_400_BAD_REQUEST)

    def handle_exception(self, exc):
        """
        Handle any exception that occurs, by returning an appropriate response,
        or re-raising the error.
        """
        try:
            response = super().handle_exception(exc)
            return response
        except Exception as e:
            (print(e, traceback.format_exc()) if settings.DEBUG else print("Server Error"))
            if isinstance(e, IntegrityError):
                return Response(
                    {"error": "The payload is not valid"},
                    status=status.HTTP_400_BAD_REQUEST,
                )

            if isinstance(e, ValidationError):

View on GitHub (pinned to 1c8a60f858)

Solutions

  1. Check logs (log_exception captures the real cause); in DEBUG also see the printed traceback.
  2. Set model on the subclass and run migrations.
  3. Validate use_read_replica and DB connectivity.
  4. Treat the blanket 400 as a symptom of a server-side fault, not a client input problem.

Example fix

# before
class AppThingView(BaseAPIView):
    pass  # model missing

# after
class AppThingView(BaseAPIView):
    model = AppThing
    ...
Defensive patterns

Strategy: try-catch

Validate before calling

class AppThingView(BaseAPIView):
    model = AppThing
    filterset_fields = []
    search_fields = []
    assert model is not None

Try / catch

try:
    resp = view.get_queryset()
except APIException as e:
    if str(e.detail) == 'Please check the view':
        inspect_server_logs()  # original exception is swallowed
        raise

Prevention

When it happens

Trigger: Subclass with missing/invalid self.model; DB error during queryset construction; read-replica routing failure; a custom model manager throwing.

Common situations: Misconfigured subclass in the 'app' app; DB outage affecting the replica; table not migrated; manager error.

Related errors


AI-assisted analysis of makeplane/plane@1c8a60f858 (2026-08-12). Data as JSON: /api/errors/ac245c5bd27d74fb. Report an issue: GitHub.