我正在 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') ```
uj5u.com熱心網友回復:
def user_directory_path(instance, filename):
return 'images/{0}/'.format(filename)
在這里,您將檔案名“轉換”為目錄名。如果上傳的檔案名包含非法字符,您將收到錯誤訊息。
盡量不要使用檔案名,或者至少在回傳之前從中洗掉所有可能的非法字符。
請注意,此函式應回傳目錄的路徑,而不是檔案的路徑,因此您不需要檔案名。
uj5u.com熱心網友回復:
找到了一個有效的解決方案
def get_file_path(instance, filename):
ext = filename.split('.')[-1]
filename = "%s.%s" % (uuid.uuid4(), ext)
return os.path.join('images/images', filename)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/327175.html
上一篇:Django將字串轉換為整數
