@guit24

В чем ошибка в попытке протестировать загрузку файла?

Models.py
class News(models.Model):
    title = models.CharField(max_length=40, verbose_name='Название')
    description = models.CharField(max_length=200, verbose_name='Описание')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True, verbose_name='Дата изменения', editable=True)
    is_active = models.BooleanField(default=True, verbose_name='Активное')
    user = models.ForeignKey(User, default=None, null=True, on_delete=models.PROTECT, verbose_name='Пользователь',
                             related_name='users_news', blank=True)


<b>forms.py</b>
class NewsForm(forms.ModelForm):
    images = forms.ImageField(widget=forms.ClearableFileInput(attrs={'multiple': True}),
                                  label='Выберите изображения, не больше 4', required=False)

    class Meta:
        model = News
        fields = ['title', 'description']
        widgets = {
            'description': forms.Textarea(attrs={'cols': 30, 'rows': 10}),
        }

<b>views.py</b>
class CreateNews(LoginRequiredMixin, FormView):

    login_url = reverse_lazy('login')
    redirect_field_name = 'redirect_to'

    form_class = NewsForm
    template_name = 'news/add_news.html'
    success_url = reverse_lazy('news')

    def form_valid(self, form):
        messages.success(self.request, 'Новость успешно добавлена')
        # return HttpResponseRedirect(self.get_success_url())
        return super().form_valid(form)

    def form_invalid(self, form, text=None):
        messages.error(self.request, text)
        return self.render_to_response(self.get_context_data(form=form))

    @transaction.atomic
    def post(self, request, *args, **kwargs):
        form_class = self.get_form_class()
        form = self.get_form(form_class)

        if form.is_valid():

            files = request.FILES.getlist('images')

            if len(files) > 4:
                text = 'Вы можете прикрепить не больше 4х изображений'
                return self.form_invalid(form, text)

            news = form.save(commit=False)
            news.user = self.request.user
            news.save()

            for f in files:
                instance = Image(photo=f, item=news)
                instance.save()
            return self.form_valid(form)
        else:
            return self.form_invalid(form)
<b>
Сам тест:</b>
        img = os.path.join(settings.TEST_FILES, 'test1.jpeg')
        photo = SimpleUploadedFile(name='test1.jpeg',
                                   content=b'Test test text|2021-11-05 12:25',
                                   content_type='image/jpeg')

        response_post = self.client.post(url, {'title': 'Title for news to add', 'description': 'ОПИСАНИЕ',
                                               'user': self.client, 'images': photo})


почему при загрузке файла не происходит перенаправление на страницу по успешному урлу? почему такой тест self.assertEquals(response_post.status_code, 302) выдает ошибку AssertionError: 200 != 302
Почему форма не валидна? как правильно организовать тест файла?
  • Вопрос задан
  • 50 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы