Задать вопрос
Starck43
@Starck43
Full-stack разработчик (Python, React)

Как сформировать из queryset список файлов?

Хочу перед сохранением добавленных фото выполнить проверку на уже привязанные к посту файлы.
Список файлов получаю через Image.objects.filter(). На выходе объект типа Image. Мне нужно в переменную поместить список из имен файлов для последующей проверки.
Модель Image (связана с постами):
class Image(models.Model):
	article = models.ForeignKey(Article, on_delete=models.CASCADE, related_name='images', null=True, blank=True)
	file = models.ImageField('Файл', upload_to='uploads/', default="/no-image.png", storage=MediaFileStorage(), unique=False)

	@property
	def filename(self):
		return self.file.name.rsplit('/', 1)[-1]


Вьюха (где редактирую пост Article и добавляю фото в таблицу Image с привязкой к тек посту):
Попробовал через values('file') отобрать записи, но не получается сформировать список имен без поддиректорий.
А в случае с values_list('filename', flat=True) - вовсе ругается Django

...
		edit_post = get_object_or_404(Article, slug=slug)
		post_gallery = Image.objects.filter(article_id=edit_post.pk).values('file') # <QuerySet [{'file': 'uploads/oikos_spanish-brush.jpg'}]>
		print((post_gallery))
...
		if post_form.is_valid():
			#Create, but don't save the post
			edit_post = post_form.save(commit=False)
			#instance = Article.objects.get(pk=edit_post.pk)

			for f in request.FILES.getlist('files'): 
				if post_gallery and f in post_gallery: # <-------- тут надо изменить проверку
					print('file exist')
				else:
					image_object = Image(file=f, article=edit_post)
					image_object.save()

			edit_post.save()


Подскажите, пожалуйста, как получить корректный список для проверки условия if f in post_gallery:
  • Вопрос задан
  • 64 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
Starck43
@Starck43 Автор вопроса
Full-stack разработчик (Python, React)
Вообщем, пришлось добавить новое поле name к модели Image и тогда стало все проще.
Спасибо за подсказку Dr. Bacon

Итого:
post_gallery = Image.objects.filter(article_id=edit_post.pk)
		gallery_file_list = post_gallery.values_list('name', flat=True)
...
			for f in request.FILES.getlist('files'):
				file = f.name
				if post_gallery and file in gallery_file_list:
					print('file exist')


Может кому пригодится!
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы