Django TestCase slef.client.patch выдает ошибку 404

Я хочу протестировать функцию обновления набора представлений

from rest_framework.viewsets import ModelViewSet
@extend_schema(tags=['Customers'])
class CustomerViewSet(ModelViewSet):
    """ This view can be used to see all the customers"""
    serializer_class = CustomerSerializer
    .....
    def update(self, request, *args, **kwargs):
        return self._update_customer(request, *args, **kwargs)

Маршрут отображается здесь (как и другие наборы представлений):

router.register(r'customers', CustomerViewSet, basename='customer')

Как и для других моих наборов представлений, где это работает, я тестирую метод обновления, разрешая его в моем тестовом примере

from django.test import TestCase
from rest_framework.reverse import reverse
......
class CustomerUpdateViewTest(TestCase):
         .....
         def test_customer_missing(self):
             url = reverse('customer-detail', [2])        
             token = create_access_token(self.my_user)

             data = {
               'customer': 'new name customer'
             }

             response = self.client.patch(url, data, 
                content_type="application/json",
                HTTP_AUTHORIZATION=f'Bearer {token}')

Я уже создал в методе настройки много клиентов. Но инструкция self.client.patch всегда выдает 404 ошибку

В моем запущенном приложении, путь - /api/customers/x (как в моем тесте, где x = идентификатор клиента) и является HTTP-глаголом PATCH

Для моих похожих взглядов, я тестирую очень похожим способом и это работает.

Когда я указываю неправильный токен, у меня возникает ошибка 401, которая, с моей точки зрения, указывает на то, что url правильный.

Сталкивались ли вы уже с такой проблемой? Если да, то что я могу сделать, чтобы решить эту проблему?

Спасибо большое PTomasz

Спасибо также toyota Supra

Проблема заключалась в пользователе, с которым я вызывал конечную точку

В коде Django (модели) пользователь имеет тип :

from django.contrib.auth.models import AbstractUser
class User(AbstractUser)

Проблема заключалась в пользователе, с которым я вызывал конечную точку

У этого пользователя есть атрибут is_superuser = False

Я вызываю конечную точку с пользователем, который не является суперпользователем

Вызов конечной точки с пользователем, имеющим атрибут is_superuser = True, будет успешным

Для меня это было немного сложно, потому что ошибка 404, с моей точки зрения, не является истинной,

за этой 404 ошибкой скрывается проблема авторизации для пользователя, который не является суперпользователем (или не имеет прав на изменение клиента)

Я получаю ту же ошибку, если использую в реверсе значение pk, которое не существует для клиента

Например, как я использую

url = reverse('customer-detail', [2]) 

если у меня нет клиента, чье значение pk = 2,

у меня тоже 404 ошибка

Следовательно,

я использую суперпользователя для вызова конечной точки

, а также замените существующий обратный код на следующий :

url = reverse('customer-detail', [self.customer_to_test.pk])
Вернуться на верх