Тест для пользовательской функции ModelAdmin с параметрами GET

Я пытаюсь написать тест для следующей функции modelAdmin:

    def response_add(self, request, obj, post_url_continue=None):
        """ Redirects to the public profile details page after creation if return=true """
        if request.GET.get('return'):
            return redirect(reverse('public_profile_details', kwargs={'id': obj.id}))
        else:
            return redirect('/admin/public/publicprofile/')

Цель этого - когда сотрудники заходят в панель администратора с веб-страницы по ссылке "Редактировать" (а не непосредственно из панели администратора), я хочу вернуть их на эту страницу после сохранения объекта. Я делаю это, прикрепляя ?return=True к ссылке администратора.

Однако у меня возникают трудности с написанием теста для этого.

Это самое близкое, чего я добился:

    def test_admin_functions(self):
        self.login_privileged_user()
        self.GET = {'return': True}
        public_profile_model_admin = admin.PublicProfileAdmin(model=models.PublicProfile, admin_site=AdminSite())
        response = self.client.get('/admin/public/publicprofile/1/change/?return=True')
        public_profile_model_admin.response_add(self, response, models.PublicProfile.objects.get(id=1))

Однако, это приводит к следующей ошибке:

AttributeError: 'TemplateResponse' object has no attribute 'id'

Я могу немного манипулировать им (меняя self.client.get на self.client.post) и получать различные другие ошибки, такие как ошибка HttpResponse, ошибка HttpResponseRedirect и т.д. Но все они имеют одну и ту же ошибку "object has no attribute 'id'".

Я знаю, что могу использовать Selenium для этого, но я пытаюсь избежать этого для моих небольших тестов, насколько это возможно.

Неважно, я понял это, используя следующее:

    def test_admin_functions(self):
        """ Test redirects after save/delete """
        self.login_privileged_user()
        public_profile_model_admin = admin.PublicProfileAdmin(model=models.PublicProfile, admin_site=AdminSite())
        response = self.client.get('/admin/public/publicprofile/1/change/?return=True')
        admin_response = public_profile_model_admin.response_add(request=response.wsgi_request,
                                                   obj=models.PublicProfile.objects.get(id=1))
        self.assertEquals(admin_response.status_code, 302)

Разница была в доступе к .wsgi_request ответа

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