How to create an Installable Django App

Overview

Example migration

Here is the (beefy) view in Django REST Framework:

class CommandPaletteView(BaseAPIView):
    """
    An API endpoint to return custom resources to the command palette on the frontend.
    """

    def get(self, request: Request) -> Response:
        logger.info(
            f"[CommandPaletteView.get] received request with data {request.data}"
        )
        buildings = Building.objects.filter(
            property_owner__property_management_company=request.user.property_management_company
        )

        return Response(
            [
                {"name": building.street_address, "url": building.frontend_detail_url}
                for building in buildings
            ]
        )

...and here is the (cleaner) view in Django-Ninja:

@api.get(
    "/command-palette/",
    response=List[CommandPaletteSchema],
    auth=JWTAuth(),
)
def get_command_palette_data(
    request: AuthenticatedWSGIRequest
) -> List[dict[str, str]]:
    return [
            {"name": building.street_address, "url": building.frontend_detail_url}
            for building in Building.objects.filter(
            property_owner__property_management_company=request.user.property_management_company
        )
        ]

Final Thoughts


Written on January 22nd, 2021