"Не удалось вывести имя файла из *" при загрузке изображений в django
Я создаю модл загрузки изображений в django и функцию upload_to, чтобы назвать путь. Но она показывает мне эту ошибку
from django.utils import timezone
from django.contrib.auth import get_user_model
# Create your models here.
def user_directory_path(instance, filename):
return 'images/{0}/'.format(filename)
class Category(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Images(models.Model):
User = get_user_model()
category = models.ForeignKey(Category, on_delete=models.PROTECT, default=1)
title = models.CharField(max_length=250)
alt = models.TextField(null=True)
image = models.ImageField(
max_length=255,upload_to=user_directory_path, default='posts/default.jpg')
slug = models.SlugField(max_length=250, unique_for_date='created')
created = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(
User, on_delete=models.PROTECT, related_name='author') ```
def user_directory_path(instance, filename):
return 'images/{0}/'.format(filename)
Здесь вы "конвертируете" имя вашего файла в имя каталога. Если имя загруженного файла содержит недопустимые символы, вы получите ошибку.
Попробуйте не использовать имя файла или, по крайней мере, удалите из него все возможные недопустимые символы перед возвратом.
Обратите внимание, что эта функция должна возвращать путь к каталогу, а не путь к файлу, поэтому имя файла не нужно.
Найдено решение, которое работает
def get_file_path(instance, filename):
ext = filename.split('.')[-1]
filename = "%s.%s" % (uuid.uuid4(), ext)
return os.path.join('images/images', filename)