python - 在 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)
在这里,您将文件名“转换”为目录名。如果上传的文件名包含非法字符,您将收到错误消息。
尽量不要使用文件名,或者至少在返回之前删除所有可能的非法字符。
请注意,此函数应返回目录的路径,而不是文件的路径,因此您不需要文件名。
推荐阅读
- c++ - C++ 错误 LNK2019 ai::FilePath 未解析的错误符号
- python - PyArrow 不写入 Feather 或 Parquet
- javascript - vue中的嵌套v-for循环
- c# - 在 VB.NET 中初始化 ExtendedWebBrowser,从 C# 到 VB.Net 解析的问题
- audio - 检测wav文件中是否有语音
- c - 为什么我们只包含头文件而不包含源文件?
- html - html div没有占据浏览器的全高
- nestjs - 如何在 NestJS 中使用警卫保护代理
- visual-studio-code - 如何让 Visual Studio 代码消耗更少的内存?
- excel - 查找一行中某个值的最后一个实例