Ожидается, что представление Equation1View будет вызвано с аргументом ключевого слова URL с именем "pk"

Я пытаюсь получить данные непосредственно из тела запроса в json. Вычисления в API будут основной частью моего Django REST Api. В будущем я собираюсь добавить базу данных, из которой я буду получать некоторые данные, которые будут использоваться в расчетах.

У меня проблема с ошибкой AssertionError: Expected view Equation1View to be called with a URL keyword argument named "pk". Fix your URL conf, or set the 'lookup_field' attribute on the view correctly.

Я не знаю, куда мне следует поместить параметр pk. Используя нижеприведенный api, я должен быть в состоянии отправить {"name":"xxx", value:1.23} в теле запроса и получить {"emission":1.23} в json-ответе. Конечно, в будущем это будет сложнее, так как я буду получать больше данных из тела запроса и соединять их с данными из базы данных, но сейчас мне нужно сделать это просто.

api urls.py:

from .views import Equation1View
from django.urls import path

urlpatterns = [
   path('equation/1', Equation1View.as_view())
   #path('equation/2'),
   #path('equation/3'), 
]

views.py

from aiohttp import request
from rest_framework import generics
from .serializers import EmissionSerializer, EquaSerializer

# Create your views here.
class Equation1View(generics.RetrieveAPIView):
    queryset = ''
    serializer_class = EquaSerializer(context={'request':request})

serializers.py

from rest_framework import serializers

class EquaSerializer(serializers.Serializer):
    emission = serializers.SerializerMethodField('perform_equation')

    def perform_equation(self):
        request = self.context.get("request")
        if request and hasattr(request, 'name') and hasattr(request, 'value'):
            return request.value

RetrieveAPIView является общим представлением api для получения определенных данных из модели, и эти данные извлекаются на основе pk, которые передаются через url, поэтому измените urls.py как

from .views import Equation1View
from django.urls import path

urlpatterns = [
   path('equation/<int:pk>', Equation1View.as_view())
   #path('equation/2'),
   #path('equation/3'), 
]
Вернуться на верх