Ожидается, что представление 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'),
]