TypeError: get() missing 1 required positional argument: 'id'; RequestFactory

Я тестирую представление UserProfilePage с объектом имитации запроса с помощью RequestFactory. При вызове обработчика GET возникает ошибка, говорящая, что отсутствует позиционный аргумент. Однако в запросе нет позиционных аргументов. Что может вызвать эту ошибку?

Traceback (most recent call last):
  File "C:\..\site-packages\django\test\testcases.py", line 1201, in setUpClass
    cls.setUpTestData()
  File "C:\..\authors\test\test_views.py", line 110, in setUpTestData
    request = RequestFactory().get(reverse("authors:profile", kwargs={'id': 1}))
  File "C:\..\site-packages\django\views\generic\base.py", line 70, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\..\site-packages\django\views\generic\base.py", line 98, in dispatch
    return handler(request, *args, **kwargs)
TypeError: get() missing 1 required positional argument: 'id'
class TestViewUserQuestionsPostedPage(TestCase):

    @classmethod
    def setUpTestData(cls):
        cls.user = get_user_model().objects.create_user("ItsMe")
        viewer = get_user_model().objects.create_user("ItsYou")
        request = RequestFactory().get(reverse("authors:profile", kwargs={'id': 1}))
        cls.view = UserProfilePage.as_view()(request).view_class
        cls.view_context = cls.view.get_context_data()

    def test_viewed_profile_of_user(self):
        self.assertIsInstance(self.view, Page)
        self.assertIn('user', self.view_context)
        self.assertEqual(self.view_context['object'], self.user)

class Page(TemplateView):

    def get_context_data(self, **kwargs):
        context = super().get_context_data()
        context['search_form'] = SearchForm()
        return context



class UserProfilePage(Page, SingleObjectMixin):

    model = get_user_model()
    pk_url_kwarg = "id"

    def get(self, request, id):
        return HttpResponse("Hi")
authors_patterns =  ([
    path("<id>", av.UserProfilePage.as_view(), name="profile")
], "authors")

urlpatterns = [
    path("users/", include(authors_patterns, namespace="authors"))
]

В пути authors_patterns у вас указано <id>. Вы не указали, что id должен быть int, например <int:id>

В обратном направлении вы передаете kwarg, который является int.

kwargs={'id': 1}

В docs указано, что:

Захваченные значения могут опционально включать тип конвертера. Например, используйте <int:name> для захвата целочисленного параметра. Если конвертер не указан если конвертер не указан, то будет сопоставлена любая строка, за исключением символа /.

Может быть, из-за того, что вы не передаете строку, она не сопоставляется?

Попробуйте указать ваш url как <int:id> или ваш kwarg как kwargs={'id': '1'} и посмотрите, решит ли это вашу проблему.

Вернуться на верх