ошибка в тестах django

endronio

Новичок
Пользователь
Окт 29, 2020
13
0
1
выскакивает данная ошибка:Generic detail view MovieDetailView must be called with either an object pk or a slug in the URLconf.
при использовании данного теста:
Код:
    def test_starform_set_in_context(self):
        request = RequestFactory().get('movie_detail')
        view = MovieDetailView()
        view.setup(request)
        context = view.get_object()
        self.assertIn('star_form', context)

url:
Код:
path("<str:slug>/", views.MovieDetailView.as_view(), name="movie_detail")

тестирую данную вьюху:
Код:
class MovieDetailView(Genrey, DetailView):
    """Полное описание фильма"""
    model = Movie
    slug_field = "url"


    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context["star_form"] = RatingForm()
        return context
 
Последнее редактирование:

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Generic detail view MovieDetailView must be called with either an object pk or a slug in the URLconf
Во вьюху нужно slug передать какой-нибудь.
Вот пример:
Python:
def test_starform_set_in_context(self):
    # судя по строке с описанием метода нужно передать название фильма в качестве слага
    request = RequestFactory().get('/корректное_название_фильма')
    response = MovieDetailView()(request)
    # проверяем код ответа на get-запрос
    self.assertEqual(response.status_code, 200)
    # проверяем что содержится тег формы в ответе
    self.assertContains(response, '<form>')
 

endronio

Новичок
Пользователь
Окт 29, 2020
13
0
1
Во вьюху нужно slug передать какой-нибудь.
Вот пример:
Python:
def test_starform_set_in_context(self):
    # судя по строке с описанием метода нужно передать название фильма в качестве слага
    request = RequestFactory().get('/корректное_название_фильма')
    response = MovieDetailView()(request)
    # проверяем код ответа на get-запрос
    self.assertEqual(response.status_code, 200)
    # проверяем что содержится тег формы в ответе
    self.assertContains(response, '<form>')
Код:
    def test_get_context_data(self):
        # судя по строке с описанием метода нужно передать название фильма в качестве слага
        request = RequestFactory().get('/movies')
        response = MovieDetailView(request)
        # проверяем код ответа на get-запрос
        self.assertEqual(response.status_code, 200)
        # проверяем что содержится тег формы в ответе
        self.assertContains(response, '<form>')

выбивает ошибку:
__init__() takes 1 positional argument but 2 were given
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
выбивает ошибку:
__init__() takes 1 positional argument but 2 were given
Внимательно переписывайте код:
в этой строке
Python:
response = MovieDetailView(request)
нужно вызывать метод так:
Python:
response = MovieDetailView()(request)
Также советую почитать документацию по django чтобы понять как работают вьюхи и как их правильно тестить.
Просто глядя на ваши тесты вообще не понятно что вы пытайтесь тестить и зачем.
 

Форум IT Специалистов