Python Django无法在为重命名文件创建函数后迁移模型
我用这段代码为模型中的重命名文件创建了重命名函数Python Django无法在为重命名文件创建函数后迁移模型,python,django,django-models,Python,Django,Django Models,我用这段代码为模型中的重命名文件创建了重命名函数 def path_and_rename(path): def path_and_rename_func(instance, filename): upload_to = path ext = filename.split('.')[-1] # get filename if instance.pk: filename = '{}.{}'.format(
def path_and_rename(path):
def path_and_rename_func(instance, filename):
upload_to = path
ext = filename.split('.')[-1]
# get filename
if instance.pk:
filename = '{}.{}'.format(instance.pk, ext)
else:
# set filename as random string
filename = '{}.{}'.format(uuid4().hex, ext)
# return the whole path to the file
return os.path.join(upload_to, filename)
return path_and_rename_func
我使用这样的函数
image=models.ImageField(upload_to=path_and_rename("test_image"))
video=models.FileField(upload_to=path_and_rename("test_file"),blank=True, null=True)
ValueError: Could not find function path_and_rename_func in Test.models.
当我使用命令进行迁移时python manage.py makemigrations
它显示这样的错误
image=models.ImageField(upload_to=path_and_rename("test_image"))
video=models.FileField(upload_to=path_and_rename("test_file"),blank=True, null=True)
ValueError: Could not find function path_and_rename_func in Test.models.
如何修复它?您不能使用这样的包装函数,因为这意味着生成的函数没有限定名称 但是,您可以定义两个辅助函数并使用它们,例如:
def path_and_rename_func(instance, filename, path):
upload_to = path
ext = filename.split('.')[-1]
# get filename
if instance.pk:
filename = '{}.{}'.format(instance.pk, ext)
else:
# set filename as random string
filename = '{}.{}'.format(uuid4().hex, ext)
# return the whole path to the file
return os.path.join(upload_to, filename)
def path_and_rename_test_image(instance, filename):
return path_and_rename(instance, filename, 'test_image')
def path_and_rename_test_file(instance, filename):
return path_and_rename(instance, filename, 'test_file')
class MyModel(models.Model):
image = models.ImageField(upload_to=path_and_rename_test_image)
video = models.FileField(
upload_to=path_and_rename_test_file,
blank=True,
null=True
)
def path_和_rename_func(实例、文件名、路径):
上传到=路径
ext=filename.split('.')[-1]
#获取文件名
如果instance.pk:
filename='{}.{}'。格式(instance.pk,ext)
其他:
#将文件名设置为随机字符串
文件名='{}.{}'。格式(uuid4().hex,ext)
#返回文件的整个路径
返回os.path.join(上传到,文件名)
定义路径和重命名测试图像(实例,文件名):
返回路径\u和\u重命名(实例、文件名“test\u image”)
定义路径和重命名测试文件(实例,文件名):
返回路径和重命名(实例,文件名,“测试文件”)
类MyModel(models.Model):
image=models.ImageField(上传到=路径和重命名测试图像)
video=models.FileField(
上传到=路径和重命名测试文件,
空白=真,
空=真
)
您不能使用这样的包装函数,因为这意味着生成的函数没有限定名称
但是,您可以定义两个辅助函数并使用它们,例如:
def path_and_rename_func(instance, filename, path):
upload_to = path
ext = filename.split('.')[-1]
# get filename
if instance.pk:
filename = '{}.{}'.format(instance.pk, ext)
else:
# set filename as random string
filename = '{}.{}'.format(uuid4().hex, ext)
# return the whole path to the file
return os.path.join(upload_to, filename)
def path_and_rename_test_image(instance, filename):
return path_and_rename(instance, filename, 'test_image')
def path_and_rename_test_file(instance, filename):
return path_and_rename(instance, filename, 'test_file')
class MyModel(models.Model):
image = models.ImageField(upload_to=path_and_rename_test_image)
video = models.FileField(
upload_to=path_and_rename_test_file,
blank=True,
null=True
)
def path_和_rename_func(实例、文件名、路径):
上传到=路径
ext=filename.split('.')[-1]
#获取文件名
如果instance.pk:
filename='{}.{}'。格式(instance.pk,ext)
其他:
#将文件名设置为随机字符串
文件名='{}.{}'。格式(uuid4().hex,ext)
#返回文件的整个路径
返回os.path.join(上传到,文件名)
定义路径和重命名测试图像(实例,文件名):
返回路径\u和\u重命名(实例、文件名“test\u image”)
定义路径和重命名测试文件(实例,文件名):
返回路径和重命名(实例,文件名,“测试文件”)
类MyModel(models.Model):
image=models.ImageField(上传到=路径和重命名测试图像)
video=models.FileField(
上传到=路径和重命名测试文件,
空白=真,
空=真
)
看看你的return
语句,你只是返回函数引用。你不能使用这样的包装函数,因为没有对它的直接引用。看看你的return
语句,你只是返回函数引用。你不能使用这样的包装函数,因为没有直接提到它。