TypeError: detail () отсутствует 1 обязательный позиционный аргумент: 'request' - PullRequest
2 голосов
/ 28 января 2020

Я новичок в Django.

Изначально у меня было представление, основанное на этой функции -

@api_view(['GET', 'PUT', 'DELETE'])
def detail(self,request, pk):
"""
Retrieve, update or delete a product instance.
"""
try:
    product = latesttrial.objects.get(pk=pk)
    newproduct = latesttrial.objects.all()
except latesttrial.DoesNotExist:
    return Response(status=status.HTTP_404_NOT_FOUND)

if request.method == 'GET':
    serializer = latestSerializer(product,context={'request': request})
    return Response(serializer.data)

elif request.method == 'PUT':
    serializer = latestSerializer(product, data=request.data,context={'request': request})
    if serializer.is_valid():
        serializer.save()
        return Response(serializer.data)
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

Затем выдается эта ошибка -

TypeError: detail() missing 1 required positional argument: 'pk' 

Для этого я сделал эти изменения в соответствии с этим ответом - отсутствует 1 обязательный позиционный аргумент: 'pk'

Тогда у меня было это представление на основе функций

@api_view(['GET', 'PUT', 'DELETE'])
def detail(request, *args, **kwargs):
"""
Retrieve, update or delete a product instance.
"""
try:
    pk = self.kwargs.get('pk')
    product = latesttrial.objects.get(pk=pk)
    newproduct = latesttrial.objects.all()
except latesttrial.DoesNotExist:
    return Response(status=status.HTTP_404_NOT_FOUND)

if request.method == 'GET':
    pk = self.kwargs.get('pk')
    serializer = latestSerializer(product,context={'request': request})
    return Response(serializer.data)

elif request.method == 'PUT':
    pk = self.kwargs.get('pk')
    serializer = latestSerializer(product, data=request.data,context={'request': request})
    if serializer.is_valid():
        serializer.save()
        return Response(serializer.data)
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

Тогда у меня была эта ошибка -

TypeError: detail() missing 1 required positional argument: 'request'

Это мое мнение -

from django.conf.urls import url, include
from rest_framework.urlpatterns import format_suffix_patterns

from .views import partial, Detailspartial, detail#

urlpatterns = [
        url(r'partial',partial,name="partial"),
        url(r'pardelete/(?P<pk>[0-9]+)/$', Detailspartial.as_view(), name="Partial details"),
        url(r'detail',detail,name="newfunction"),
]

Как мне решить мою проблему. Пожалуйста, помогите !!

1 Ответ

4 голосов
/ 28 января 2020

Вы можете отменить изменения предыдущей версии и изменить это:

url(r'detail',detail,name="newfunction"),

на это:

url(r'detail(?P<pk>[0-9]+)/$',detail,name="newfunction"),
...