Ожидаемое представление Client_view будет вызываться с аргументом ключевого слова URL с именем "pk". Исправьте свой URL-адрес - PullRequest
0 голосов
/ 25 октября 2019
[Error][1]
AssertionError at /api/client-details/ Expected view Client_view to be called with a URL keyword argument named "pk". Fix your URL conf, or set the `.lookup_field` attribute on the view correctly. Request Method: DELETE Request URL: 
http://127.0.0.1:8000/api/client-details/ Django Version: 2.2.6 Python Executable: C:\Users\AravindManoj\PycharmProjects\Client\venv\Scripts\python.exe Python Version: 3.7.4 Python Path: 
['C:\\Users\\AravindManoj\\PycharmProjects\\Client\\Client',
'C:\\Users\\AravindManoj\\AppData\\Local\\Programs\\Python\\Python37\\python37.zip', 

При использовании общего представления в Django отображается ошибка при использовании функции DELETE. Пожалуйста, кто-нибудь даст мне синтаксис общих видов в наборе моделей, я не нашел никаких проблем, но не удалил функцию

Views.py

    from django.http import Http404, HttpResponse
    from rest_framework import viewsets, status, generics
    from rest_framework.decorators import api_view
    from rest_framework.response import Response
    from .serializers import ClassSerializer
    from .models import Client

    class Client_view(viewsets.ModelViewSet, generics.RetrieveUpdateDestroyAPIView):
        queryset = Client.objects.all().order_by('-Name')
        serializer_class = ClassSerializer*
        lookup_fields = ['Name', 'UserName', 'Mobile', 'Email', 'Address']

urls.py

    from rest_framework import routers
    from .views import Client_view
    router = routers.DefaultRouter()
    router.register('', Client_view)
    urlpatterns = router.urls

models.py

    from django.db import models
    class Client(models.Model):
        Name = models.CharField(max_length=15)
        UserName = models.CharField(max_length=15)
        Email = models.CharField(max_length=20)
        Mobile = models.CharField(max_length=10)
        Address = models.CharField(max_length=20)

serializer.py

    from rest_framework import serializers
    from .models import Client
    class ClassSerializer(serializers.HyperlinkedModelSerializer):
        class Meta:
            model = Client
            fields = ['Name', 'UserName', 'Email', 'Mobile', 'Address']

Ответы [ 2 ]

0 голосов
/ 25 октября 2019

Вы использовали lookup_fields, который не является встроенной функцией. Попробуйте сделать это с помощью собственного миксина, как описано здесь в документации.

0 голосов
/ 25 октября 2019

При использовании ViewSet (в вашем случае вы используете ModelViewSet) для представления требуется значение pk из URL. Это делается автоматически при использовании маршрутизатора.

Маршрутизатор создаст несколько URL-адресов: Пример:

router.register(r'', Client_view)

URL pattern: ^$ Name: 'client_view-list'
URL pattern: ^{pk}/$ Name: 'client_view-detail'

Один из атрибутов ViewSet - lookup_field, поле поискапозволяет вам изменить имя захвата URL, который вы используете. В вашем случае у вас, похоже, есть lookup_fields и указано несколько значений. Попробуйте изменить это на lookup_field='pk.

В качестве примечания, может быть полезно взглянуть на исходный код restframework вокруг [Views]. 1

...