Search code examples
djangodjango-rest-framework

Django REST API Form Showing "Content" Only


In my REST API screen I'm seeing this view:

enter image description here

Instead of the "Content" field I used to see a form where I could input data. Now my only option is to manually write in JSON. I'm not entirely sure when/how this change happened so I'm at a bit of a loss for where to look to change it back. I've tried changing the media type on this page but that has no effect.

Does anyone know how this field is generated and how I can switch it back to the form data instead?

Edit: views.py

from django.shortcuts import render
from rest_framework import viewsets
from rest_framework.response import Response
from rest_framework.views import APIView

from .models import Asset, Pack
from .serializers import (
    AssetSerializer,
    CreateAssetSerializer,
    PackSerializer,
)


class AssetViewSet(viewsets.ViewSet):
    """API endpoint that allows assets to be viewed or edited."""

    queryset = Asset.objects.all()

    def list(self, request):
        serializer = AssetSerializer(self.queryset, many=True)
        return Response(serializer.data)

    def create(self, request):
        serializer = CreateAssetSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        serializer.save()
        return Response(serializer.data)


class PackViewSet(viewsets.ViewSet):
    """API endpoint that allows packs to be viewed or edited."""

    queryset = Pack.objects.all()

    def list(self, request):
        serializer = PackSerializer(self.queryset, many=True)
        return Response(serializer.data)

serializers.py

from rest_framework import serializers
from .models import Asset, Pack


class AssetSerializer(serializers.ModelSerializer):
    class Meta:
        model = Asset
        fields = "__all__"


class CreateAssetSerializer(serializers.ModelSerializer):
    class Meta:
        model = Asset
        fields = (
            "path",
            "name",
            "asset_type",
            "created_by",
        )


class PackSerializer(serializers.ModelSerializer):
    class Meta:
        model = Pack
        fields = "__all__"


class CreatePackSerializer(serializers.ModelSerializer):
    class Meta:
        model = Pack
        fields = (
            "name",
            "pack_type",
            "contents",
        )

Thanks, Mitchell


Solution

  • I ended up solving this by adding serializer_class = CreateAssetSerializer to my AssetViewSet class