Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django无法在为重命名文件创建函数后迁移模型_Python_Django_Django Models - Fatal编程技术网

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
语句,你只是返回函数引用。你不能使用这样的包装函数,因为没有直接提到它。