Изменение URL не влияет на JSON. Возвращено DjangoRest Framerwork - PullRequest
2 голосов
/ 14 июня 2019

Я пытаюсь отфильтровать сохраненный список моих клиентов и вернуть определенный, когда я пытаюсь (xxx / api / Customers / fred), он возвращает всех клиентов и все, что было введено после клиентов / не влияет на возвращенный JSON.

Представления

class CustomerListAPIView(generics.ListAPIView):
    queryset = Customer.objects.all()
    serializer_class = CustomerSerializer

class CustomerRetrieveAPIView(generics.RetrieveAPIView):
    queryset = Customer.objects.all()
    serializer_class = CustomerSerializer
    lookup_field= "name"

Сериализаторы

class CustomerSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:
        model = Customer 

        fields = ['name' , 'address', 'phonenumber']

URL

url(r'^api/customers/', views.CustomerListAPIView.as_view(), name = "customer_list"),
url(r'^(?P<slug>[\w-]+)/$', views.CustomerRetrieveAPIView.as_view(), name='retrieve'),

Я также пытался переопределить def get_queryset (self, * args, ** kwargs): но этот метод, похоже, не срабатывает при вводе URL

1 Ответ

1 голос
/ 14 июня 2019

Поставьте более подробные URL-адреса перед более общими, чтобы избежать двусмысленности, добавьте $ в конец customer_list шаблона URL, добавьте отсутствующий префикс к retrieve Шаблон URL:

url(r'^api/customers/(?P<slug>[\w-]+)/$', views.CustomerRetrieveAPIView.as_view(), name='retrieve'),
url(r'^api/customers/$', views.CustomerListAPIView.as_view(), name = "customer_list"),

все ваши запросы были обработаны по первому шаблону - потому что оба URL-адреса (список и подробности) начинаются с api/customers/.

...