Как правильно сохранить(создать) файл в тестах Django в setUp
Как правильно сохранить(создать) файл в тестах Django в setUp. Надо сохранить список файлов в setUp. Мой вариант не работает. Кто может подсказать? Мой вариант
self.test_gallery_images_one = GalleryImage.objects.create(
gallery_id=self.test_gallery_one,
photo=[
'C:/Python Progs/PythonProjects/Django/coomo-website/media/gallery/1/zp3vALSsgDc.jpg',
'C:/Python Progs/PythonProjects/Django/coomo-website/media/gallery/1/sjz-COq95j0.jpg',
'C:/Python Progs/PythonProjects/Django/coomo-website/media/gallery/1/CsakTaFqoD4.jpg'])
Ошибка:
System check identified no issues (0 silenced).
........E....
======================================================================
ERROR: test_gallery_list (gallery.tests.TestGallery)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Python Progs\PythonProjects\Django\coomo-website\gallery\tests.py", line 20, in setUp
self.test_gallery_images_one = GalleryImage.objects.create(
File "C:\Users\Mysti\.virtualenvs\coomo-website-S_FagKfe\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:\Users\Mysti\.virtualenvs\coomo-website-S_FagKfe\lib\site-packages\django\db\models\query.py", line 453, in create
obj.save(force_insert=True, using=self.db)
File "C:\Users\Mysti\.virtualenvs\coomo-website-S_FagKfe\lib\site-packages\django\db\models\base.py", line 726, in save
self.save_base(using=using, force_insert=force_insert,
File "C:\Users\Mysti\.virtualenvs\coomo-website-S_FagKfe\lib\site-packages\django\db\models\base.py", line 763, in save_base
updated = self._save_table(
File "C:\Users\Mysti\.virtualenvs\coomo-website-S_FagKfe\lib\site-packages\django\db\models\base.py", line 868, in _save_table
results = self._do_insert(cls._base_manager, using, fields, returning_fields, raw)
File "C:\Users\Mysti\.virtualenvs\coomo-website-S_FagKfe\lib\site-packages\django\db\models\base.py", line 906, in _do_insert
return manager._insert(
File "C:\Users\Mysti\.virtualenvs\coomo-website-S_FagKfe\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:\Users\Mysti\.virtualenvs\coomo-website-S_FagKfe\lib\site-packages\django\db\models\query.py", line 1270, in _insert
return query.get_compiler(using=using).execute_sql(returning_fields)
File "C:\Users\Mysti\.virtualenvs\coomo-website-S_FagKfe\lib\site-packages\django\db\models\sql\compiler.py", line 1409, in execute_sql
for sql, params in self.as_sql():
File "C:\Users\Mysti\.virtualenvs\coomo-website-S_FagKfe\lib\site-packages\django\db\models\sql\compiler.py", line 1352, in as_sql
value_rows = [
File "C:\Users\Mysti\.virtualenvs\coomo-website-S_FagKfe\lib\site-packages\django\db\models\sql\compiler.py", line 1353, in <listcomp>
[self.prepare_value(field, self.pre_save_val(field, obj)) for field in fields]
File "C:\Users\Mysti\.virtualenvs\coomo-website-S_FagKfe\lib\site-packages\django\db\models\sql\compiler.py", line 1353, in <listcomp>
[self.prepare_value(field, self.pre_save_val(field, obj)) for field in fields]
File "C:\Users\Mysti\.virtualenvs\coomo-website-S_FagKfe\lib\site-packages\django\db\models\sql\compiler.py", line 1304, in pre_save_val
return field.pre_save(obj, add=True)
File "C:\Users\Mysti\.virtualenvs\coomo-website-S_FagKfe\lib\site-packages\django\db\models\fields\files.py", line 299, in pre_save
if file and not file._committed:
AttributeError: 'list' object has no attribute '_committed'
----------------------------------------------------------------------
Ran 13 tests in 0.358s
FAILED (errors=1)
Destroying test database for alias 'default'...
models.py
class Gallery(models.Model):
title = models.CharField(max_length=150, verbose_name='Название галлереи')
description = models.TextField(blank=True, null=True, verbose_name='Описание галлереи')
author = models.ForeignKey(
User,
default=True,
on_delete=models.CASCADE,
verbose_name='Автор')
class GalleryImage(models.Model):
gallery_id = models.ForeignKey(
Gallery,
on_delete=models.CASCADE,
verbose_name='Название галлереи',
help_text='Выберите к какой галлерее будет принадлежать картинка',
related_name='photos')
photo = models.ImageField(upload_to=get_upload_to, verbose_name='Картинка')
Ответы (1 шт):
Автор решения: Roman Konoval
→ Ссылка
Приблизительно так:
for path in [
'C:/Python Progs/PythonProjects/Django/coomo-website/media/gallery/1/zp3vALSsgDc.jpg',
'C:/Python Progs/PythonProjects/Django/coomo-website/media/gallery/1/sjz-COq95j0.jpg',
'C:/Python Progs/PythonProjects/Django/coomo-website/media/gallery/1/CsakTaFqoD4.jpg']:
with open(path, 'rb') as f:
GalleryImage.objects.create(
gallery_id=self.test_gallery_one, photo=ImageFile(f)
)
Вот только сохранить все это в одну переменную, как у вас делается с self.test_gallery_images_one получится только если превратить ее в список, ведь вы создаете не один, а три файла.