ValueError: операция ввода-вывода для закрытого файла.Питон, Джанго, Бото3 - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть метод публикации в views.py:

 def post(self, request):
    author = User.objects.get(id=request.data.get('user_id'))
    new_article = Article.objects.create(author=author, title=request.data.get('title'), 
                        text=request.data.get('text'),img=File(request.data.get('image[0]')))
    new_article.save()
    for i in range(20):
        img_key = 'image[{}]'.format(i)
        img = request.data.get(img_key)
        if img:
            article_img = ArticleImage(article=new_article,img=File(img), is_main=False )
            article_img.save()
        else :
            break
    images = ArticleImage.objects.filter(article=new_article)   

    return Response({
            'article': ArticleSerializer(new_article, context=self.get_serializer_context()).data                
    }) 

Создает новую статью, которая содержит файлы img. Файлы изображений я сохраняю в ведре AWS S3. Сохранение основного изображения статьи с использованием метода new_article.save () работает нормально, но article_img.save () возвращает ошибку:

** Файл "C: \ Users \ Arcvi \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ storages \ backends \ s3boto3.py", строка 520, в _save_content content.seek (0, os.SEEK_SET) *

*** ValueError: операция ввода / вывода для закрытого файла. ****

Думаю, я что-то не так делаю в цикле for. Если вам нужна дополнительная информация о коде, я поделюсь им. Пожалуйста, помогите.

1 Ответ

0 голосов
/ 16 апреля 2019

Попробуйте, возможно, открыть этот файл, а затем создать объект File django.

img = request.data.get(img_key)
if img:
    with open(img.file.seek(0), "rb") as opened_image:
        article_img = ArticleImage(article=new_article,img=File(opened_image), is_main=False )
        article_img.save()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...