我无法从随机图像目录中选择随机图像。
def random_img():
dir_path = os.path.join(BASE_DIR, 'media')
files = [content for content in listdir(
dir_path) if isfile(path_join(dir_path, content))]
return str(choice(files))
我将此功能用于:
profile_pic = models.ImageField(
default=random_img(), upload_to="profile_images/")
但这在迁移过程中出现了问题
答案 0 :(得分:0)
如果您希望默认图像是 random ,那么您应该传递一个callable,因为否则,您会急切地 evaluate 函数,结果就是默认值。例如:
from django.db import models
from os import listdir
import os.path
from os.path import isfile
from os.path import join as path_join
from random import choice
def random_img():
dir_path = os.path.join(BASE_DIR, 'media')
files = [
content for content in listdir(dir_path)
if isfile(path_join(dir_path, content))
]
return choice(files)
class SomeModel(models.Model):
profile_pic = models.ImageField(default=random_img, upload_to="profile_images/")
所以我们不给random_img
添加括号,我们不调用函数,我们传递函数本身,让Django在以下情况调用它:它需要选择一个默认值。
random_img
的结果应该是相对于MEDIA_ROOT
的文件路径(这里看起来是正确的,尽管如果更改设置,它可能会失败)。